视频传送门:https://www.bilibili.com/video/BV1Ey4y1L7xU?p=8&spm_id_from=pageDriver
一、DDT+EXCEL数据驱动
excel/yaml (excel适合做web自动化测试,yaml适合做接口自动化)
1.什么是DDT
data driver test数据驱动测试。可以完美和Unitttest结合实现数据驱动。
2.DDT使用的方式(通过装饰器来使用)
在函数或者类上面加上一个装饰器用来实现一些特定的功能。
@ddt 装饰类,作用是用于声明当前类使用ddt数据驱动。
@data 装饰函数,作用是给函数传值。
@unpack 装饰函数,作用是数据解包
@file_data 装饰函数,作用是直接读取yaml、json文件。
二、Pytest
pytest是unittest的升级版
可以结合allure生成定制版的测试报告
支持很多强大的第三方插件
allure-pytest(生成allure报告),pytest-xdist(做并发),pytest-ordering(处理测试用例的执行顺序)…
三、pytest默认规则
1.模块名必须以test_开头或者_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头
将unittest改为pytest
base_util.py修改如下:
import time
from selenium import webdriver
class BaseUtil:
def setup(self) -> None: #unittest是setUp,pytest是setup
global driver
# 打开浏览器
self.driver = webdriver.Chrome()
driver = self.driver
# 加载网页
self.driver.get("http://localhost/ecshop/admin/privilege.php?act=logout")
def teardown(self) -> None: #unittest是tearDown,pytest是teardown
time.sleep(3)
self.driver.quit()
test_login.py修改如下:
import pytest
from ddt import ddt, data, unpack
from selenium import webdriver
from base.base_util import BaseUtil
from common.excel_util import ExcelUtil
from pageobject.login_page import LoginPage
# @ddt
class TestLogin(BaseUtil):
# @data(*ExcelUtil().read_excel())
# @unpack
@pytest.mark.parametrize("index,username,password", ExcelUtil().read_excel())
def test_01_login(self, index, username, password):
""" 登录 """
lp = LoginPage(self.driver)
lp.login_ecshop(username, password)
if index == 1:
# 断言
# self.assertEqual(lp.get_except_result(),'退出')
assert lp.get_except_result() == '退出'
all.py修改如下:
import os
import unittest
from HTMLTestRunner import HTMLTestRunner
import pytest
if __name__ == '__main__':
# #执行需要的用例,并且生成HTML格式的自动化的测试报告
# #使用unittest默认的测试用例的加载器去发现testcase目录下以py结尾的所有的测试用例
# suite = unittest.defaultTestLoader.discover("./testcase","*.py")
# #生成html报告文件
# report_file = open("./report/reports.html","wb")
# #s生成一个HTMLTestRunenr运行器对象(必须下载一个文件HTMLTestRunner.py,放到python的lin目录)
# runner = HTMLTestRunner(stream=report_file,title="ECSHOP自动化测试报告", description="报告详情如下:")
# #通过运行器运行测试用例
# runner.run(suite)
#第一步:生成json格式临时文件
pytest.main(['-vs',r'E:\workspace\pythonwork\publicdemo\testcase','--alluredir','./temp','--clean-alluredir'])
#第二步:根据json格式临时文件生成allure报告
os.system("allure generate ./temp -o ./report --clean")
第一步
pytest.main是用来运行pytest测试用例的,它会自动寻找符合pytest规则的用例
‘-vs’表示打印数据结果
第二个参数是表示测试用例在哪个目录
‘–alluredir’,’./temp’表示allure报告放在根目录的temp目录下
'–clean-alluredir’表示每次执行都把temp目录清除掉
第二步
allure generate表示构建
./temp 是根据temp目录下的json文件
-o 表示输出
./report 输出到report目录下
–clean 表示每次都清除原来的文件