pytest安装
pip install -U pytest
pytest 定义的规范
- 测试文件
- test_*.py
- *_test.py
- 用例识别
- Test*类包含的所有test_*的方法(测试类不能带有__init__方法)
- 不在class中的所有的test_*方法
- pytest也可以执行unittest框架写的用例和方法
pytest 命令行参数
-
终端执行
- pytest/py.test
- pytest –v (最高级别信息–verbose) 打印详细运行日志信息
- pytest -v -s 文件名 (s是带控制台输出结果,也是输出详细)
- pytest 文件名.py 执行单独一个pytest模块
- pytest 文件名.py::类名 运行某个模块里面某个类
- pytest 文件名.py::类名::方法名 运行某个模块里面某个类里面的方法
- 报错停止运行
- pytest -x 文件名 一旦运行到报错,就停止 运行
- pytest —maxfail=[num] 当运行错误达到num的时候就停止 运行
- pytest -k "类名 and not 方法名” 执行某个关键字的用全
- pytest -m [标记名] @pytest.mark.[标记名] 将运行有这个标记的测试用例
pytest Pycharm 配置
pytest 测试装置
- import pytest 类似的setup,teardown同样更灵活,
- 模块级(setup_module/teardown_module)模块始末,全局的(优先最高)
- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
- 方法级(setup_method/teardown_methond)开始于方法始末(在类中)
- 类里面的(setup/teardown)运行在调用方法的前后
allure 下载地址
https://github.com/allure-framework/allure2/releases
- windows/mac通用安装方法
- https://github.com/allure-framework/allure2/releases 下载allure2.7.zip包,
- 解压->进入bin目录->运行allure.bat,
- 把bin目录加入PATH环境变量
- Mac 可以使用brew安装:
- brew install allure
- 官网:http://allure.qatools.ru/
- 文档:https://docs.qameta.io/allure/#
allure 特性
- 场景:
- 希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息
- 解决:
- @Feature, @story, @step, @attach
- 步骤:
- import allure
- 功能上加@allure.feature(‘功能名称’)
- 子功能上加@allure.story(‘子功能名称’)
- 步骤上加@allure.step(‘步骤细节’)
- @allure.attach(‘具体文本信息’) ,需要附加的信息,可以是数据,文本,图片,视频,网页
- 如果只测试登录功能运行的时候可以加限制过滤:
- pytest 文件名 —allure-features ‘购物车功能’ —allure-stories ‘加入购物车’ (注意这里—allure-features中间是-中线)
allure 执行
pytest test_demo.py --alluredir ./result
allure serve ./result
参考代码
"""
__author__ = 'hogwarts_xixi'
__time__ = '2021/3/10 8:14 下午'
"""
import json
import allure
import pytest
import requests
def test_demo():
assert True
def test_demo1():
assert False
def test_demo2():
assert False
def test_demo3():
assert True
class TestDemo:
def setup(self):
print("开始测试")
def teardown(self):
print("结束测试")
def test_demo(self):
assert True
def test_login_ok(self):
username = "hogwarts"
password = "123456"
@pytest.mark.parametrize('username,password',[
["hogwartsfail","123456"],
["","123456"],
["hogwarts",""],
["", ""],
["123","456"]
])
def test_login_fail(self,username,password):
print(username)
print(password)
# username = "hogwartsfail"
# password = "123456"
@allure.title("验证测试人社区 贴子ID")
@pytest.mark.parametrize('topic_id',[
"10704","10705","10706","10707"
])
def test_ceshiren(self,topic_id):
with allure.step("访问【测试人社区】"):
# topic_id = "10706"
result = requests.get(f"https://ceshiren.com/t/topic/{topic_id}.json")
print(result.json())
response_id = result.json()['id']
with allure.step("验证测试结果"):
assert topic_id == str(response_id)
allure.attach.file("/Users/juanxu/Documents/图片/扫一扫.jpeg",attachment_type=allure.attachment_type.JPG)
# json.loads()
allure.attach