pytest安装
安装插件
pytest
pytest-html ( 生成html格式的自动化测试报告)
pytest-xdist 测试用例分布式执行。 多CPU分发。
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用例失败后重跑
allure-pvtest 用于生成美观的测试报告。
放到requirements. txt中,通过pip install -r requirements.txt
1)运行所有: pytest main()
2)指定模块: pytest.main([-vs'test _login.py'])
(3)指定目录: pytest main(['-vs',' ./interface_ _testcase'])
4)通过nodeid指定用例运行: nodeid由模块名,分隔符,类名,方法名,函数名组成。
执行这个包下,某一个函数
pytest.main(["-vs",'/interface_ testcase/test jinterface. py::test_ 04 _func])
执行类下某一个方法
pytest. main(["-vs'./interface_ testcase/test _interface py::TestInterface::test_ 03 _ziliao'])
(5)多线程
pytest .main ( ['-vs' ,'./testcase','-n=2'])
(6)测试用例执行失败后重跑,算本次用例有三次执行
pytest .main(['-vs', './ testcase', '- - reruns=2 ' ] )
(1)运行所有: pytest
(2)指定模块: pytest -VS test login. py
(3)指定目录: pytest -VS ./interface_ testcase
(4)指定目录: pytest -VS /interface testcase/test interface. py:.test 04 func
-s :表示输出调试信息,包括print打印的信息.
-v:显示更详细的信息
-vs :这两个参数一起用
-n :支持多线程或者分布式运行测试用例。-n跟的是线程数
如: pytest -VS ./testcase/test_ login.py -n 2
--reruns NUM:失败用例重跑
pytest -vs ./testcase --reruns 2
-x :表示只要有一个用例报错,那么测试停止
pytest -vs ./testcase -x
--maxfail=2 出现两个用例失败就会停止
pytest -vs ./testcase --maxfail 2
-k:根据测试用例的部分字符串指定测试用例,
如字符串包含"ao"的用例
pytest -vs ./testcas -k "ao"
--html ./reportreport. html :生成htm的测试报告。
pytest.in这个文件它是pytest单元测试框架的核心配置文件。
1.位置: -般放在项目的根目录
2.编码:必须是ANSI ,可以使用notpad++修改编码格式。
3.作用:改变pytest默认的行为。
4.运行的规则;不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。
[pytest]
addopts = -vs ##命令行的参数,用空格分隔
testpaths = ../pytestproiect ##测试用例的路径
python files = test*.py ##模块名的规则
python classes = Test* #类名的规则
python functions = test ##方法名的规则
unittest: asclI的大小来绝对的执行的顺序
pytest:默认从上到下
改变默认的执行顺序:使用mark标记,
@pytest.mark.run(order=1)
@pytest.mark.run(order=2)
如何分组执行(冒烟,分模块执行,分接口和web执行)
pytest跳过测试用例
(1)无条件跳过
@pytest .mark. skip ( reason=“微微太漂亮”)
(2)有条件跳过
@pytest .mark. skipif (age>=18, reason=‘成年’,)
@pytest. fixture(scope=“”, params=“” ,autouse=" “,ids=” “,name=”")
(1 )scope表示的是被@pytest. fixture标记的方法的作用域。function(默认) , class , module ,package/session.
(2)params :参数化(支持,列表[,元祖(),字典列表[{.0.0],字典元祖({,{.{})
(3)autouse=True :自动执使用,默认False
(4)ids :当使用params参数化时,给每一个值设置一 个变量名。 意义不大。
(5)name :给表示的是被@pytest.fixture标记的方法取一个别名。
当取了别名之后,那么原来的名称就用不了了。
结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)
1.conftest. py文件是单独存放的一个夹具配置文件,名称是不能更改。
2用处可以在不同的py文件中使用同一个fixture函数。
3.原则上conftest py需要和运行的用例放到同一层 。并且不需要做任何的import导入的操作。
总结:
setup/teardown , setup_ Class/teardown _class 它是作用于所有用例或者所有的类
@pytest.fixtrue()它的作用是既可以部分也可以全部前后置。
conftest py和@pytest fixtrue()结合使用,作用于全局的前后置。
1.下载,解压,配置path路径。
https://github.com/allure-framework/allure2/releases
配置路径D:\Tools\allure-2.17.3\bin
验证: allure --version
问题: dos可以验证但是pycharm验证失败,怎么办,重启pycharm.|
2加入命令性成json格式的临时报告。
--alluredir ./temp
3.生成allure报告
os.system('allure generate ./temp -o ./repost --clean') 基础语法 json临时报告 输出到 指定文件 清空原有报告
os. system(allure generate ./temp -0./report --clean')
allure generate 命令.固定的
./temp 临时的json格式报告的路径
-o 输出output
./report 生成的allure报告的路径
--clean 清空/report路径原来的报告
from uitl.excel import ExcelUitl
import time
ex = ExcelUitl()
data = ex.get_data()
# 传参方式
# [['Test_001', '用户名', '密码', '备注'], ['Test_002', '用户名', '密码', '备注']]
class TestRunner:
def setup(self):
self.start_time = time.time()
def teardown(self):
self.finish = time.time()
print("执行用例所用时间:%.2f" % (self.finish - self.start_time))
@pytest.mark.parametrize('tid, describe, modules, args', data) # 用例模块
@pytest.mark.flaky(reruns=1) # 失败用例重跑
def test_main(self, tid, describe, modules, args):
self.logical_pc(modules)
self.logger.info("编号:%s,登录%s" % (tid, modules))