目录
一、前言
二、pytest简介
三、pytest入门
四、总结
一、前言
这两天学习了pytest测试框架,下面我就来简单分享下学习成果。
二、pytest简介
pytest是Python的测试框架,特点就是灵活、简单、易上手。
pytest有丰富的第三方插件,比较好用的如
pytest-selenium(集成selenium)、
pytest-html(完美html测试报告生成)、
pytest-rerunfailures(失败case重复执行)、
pytest-xdist(多CPU分发)等。
三、pytest入门
3.1、pytest安装
代码语言:javascript复制# 安装pytest
pip install -U pytest
# 查看pytest版本
pytest --version
3.2、pytest规则
- 测试文件以test_开头(以_test结尾也可)
- 测试类以Test开头,注意,Test首字母要大写
- 测试类名称后面直接跟冒号,而不能有()
- 测试类不能带有 __init__ 方法
- 测试类里的每个函数都必须有参数(self)
- 测试函数以test_开头,注意,这时首字母要小写
- 断言使用基本的assert即可
3.3、pytest入门demo
新建一个python文件pytest_demo.py。
代码语言:javascript复制import pytest
def add(a, b):
return a b
@pytest.mark.parametrize('a,b,expect', [
[1, 1, 2],
[2, 2, 4],
[3, 3, 6],
[4, 4, 8],
[5, 5, 10]
])
def test_add_list(a, b, expect):
assert add(a, b) == expect
# 执行方式一
# "-s": 显示程序中的print/logging输出
# "-v": 丰富信息模式, 输出更详细的用例执行信息
if __name__ == '__main__':
pytest.main(["-s", "-v", "pytest_demo.py"])
# 执行方式二
#在Terminal或者cmd执行:python -m pytest pytest_demo.py
执行结果:
3.4、pytest参数分离
3.4.1、excel参数化
为了更灵活的设计自动化测试用例,可以将测试用例写到excel或者json,再进行读取。
新建python文件pytest_excel.py。
代码语言:javascript复制import pytest
import requests
import xlrd
import json
def readExcel():
data = list()
book = xlrd.open_workbook('../testdata/excel_data.xls')
sheet = book.sheet_by_index(0)
for item in range(1, sheet.nrows):
data.append(sheet.row_values(item))
return data
@pytest.mark.parametrize('data', readExcel())
def test_excel(data):
r = requests.post(
url=data[0],
json=json.loads(data[1]))
assert r.json() == json.loads(data[2])
if __name__ == '__main__':
pytest.main(["-s", "-v", "pytest_excel.py"])
准备excel_data.xls内容如下:
url | body | expect |
---|---|---|
http://localhost:9999/demo/update | {"id":"111","username": "pyauto1","password": "123456"} | true |
http://localhost:9999/demo/update | {"id":"222","username": "pyauto2","password": "123456"} | true |
3.4.2、json参数化
新建python文件pytest_json.py。
代码语言:javascript复制import pytest
import requests
import json
def readJson():
return json.load(open('../testdata/json_data.json', 'r', encoding="utf-8"))['item']
@pytest.mark.parametrize('data', readJson())
def test_json(data):
r = requests.post(
url=data['request']['url'],
json=data['request']['body'])
assert str(r.json()).lower() == data['response']
if __name__ == '__main__':
pytest.main(["-s", "-v", "pytest_json.py"])
准备json_data.json.xls内容如下:
代码语言:javascript复制{
"item":
[
{
"request":
{
"url": "http://localhost:9999/demo/update",
"body":
{
"id":"111",
"username": "pyauto1",
"password": "123456"
}
},
"response":"true"
},
{
"request":
{
"url": "http://localhost:9999/demo/update",
"body":
{
"id":"222",
"username": "pyauto2",
"password": "123456"
}
},
"response":"true"
}
]
}
3.5、pytest-allure测试报告
3.5.1、win安装allure
代码语言:javascript复制allure下载地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
下载allure-commandline-x.x.x.zip。解压后将allure/bin添加到系统变量中,在cmd中输入allure验证是否安装成功。
3.5.2、生成allure测试报告
代码语言:javascript复制# 在测试文件的当前路径执行如下命令执行测试用例:
pytest -v pytest_json.py --alluredir ./allure
# 执行如下命令生成测试报告(自动打开浏览器):
allure serve allure
3.5.3、allure测试报告如下
四、总结
果然,pytest灵活、简单、易上手,没骗人(笑),有点Python基础的情况下,实测1天可入门。