fixtture使用:如何两个方法都是用同一个数据,则就可以使用fixture def test_1(): json = requests.get("https://testerhome.com/api/v3/topics.json?limit=2").json() assert len(topics['topics']) == 2 def test_2(): json = requests.get("https://testerhome.com/api/v3/topics.json?limit=2").json() assert topics['topics'][0]['deleted'] == False 俩个方法都用到json的数据,就可以使用fixture @pytest.fixture() def topics(): url = 'https://testerhome.com/api/v3/topics.json?limit=2' return requests.get(url).json() def test_1(topics): assert len(topics['topics']) == 2 def test_2(topics): assert topics['topics'][0]['deleted'] == False @pytest.fixture(scope="function") def topics(): url = 'https://testerhome.com/api/v3/topics.json?limit=2' return requests.get(url).json() 当scope="function"时,也是默认的,在每个方法前都会执行; 当scope="module"时,每个模块都会执行一次 当scope="session"时,同个目录下的模块都只执行一次 当scope="class"时, 在每个类里面,只执行一次 也可以将fixture的方法定义到conftest.py文件中,会自动读取 python3 -m http.server 启动目录 会启动一个本地的服务 生成allue的测试报告: pytest --alluredir=报告存放的路径 测试用例路径 allure serve 生产测试报告的路径 :可以打开allure测试报告 生产Junit测试报告: pytest --junitxml=报告的路径 测试用例路径 分组执行:pytest -m 组名 @pytest.mark.a def test_2(topics2): assert topics2['topics'][0]['deleted'] == False @pytest.mark.b def test_3(topics3): assert topics3['topics'][0]['deleted'] == False @pytest.mark.b def test_4(topics3): assert topics3['topics'][0]['deleted'] == False pytest -m b执行b组的测试用例
pytest常用的参数
-v:输出的信息会更详细,最明显的区别就是每个文件中的测试用例都占一行,测试的名字和结果都会显示出来 pytest -v file.py-m: 用于标记测试分组,以便快速选中并运行 ,下面例子可以使用:pytest -m "run_bb"只执行test_case_o1 @pytest.mark.run_bb def test_case_01(): """ 出口流程可以正常创建 """ assert 0 @pytest.mark.run_aa def test_case_02(): """ 入库流程可以正常创建 """ assert 0 == 0--collect-only:在测试之前,可以展示在给定配置下那些测试用例会被执行,检查选中的测试用例是否符合预期-k:允许你使用表达式指定希望允许的测试用例,下面的例子可以这样允许:pytest -k "aaa or bbb" 两个py文件:test_aaa.py和test_bbb.py-x:一旦遇到失败,就会全局停止--tb=style:决定捕捉到失败是输出信息的显示方式,pytest会列举失败信息,包括失败出现在哪一行、是什么失败、怎么失败的,此过程我们称之为”信息回溯“ 一般用的是:--tb=no 屏蔽全部的回溯信息-q:简化输出信息-s:在终端允许时输出某些结果,正常情况下,所有的测试输出都会被捕捉