同步操作将从 十日卜/pytest 接口自动化测试示例 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在开始项目之前,您的计算机上需要安装 Python。
以 Window 平台安装 Python 为例:
检查 Python 是否安装成功:
进入 cmd 命令行,输入:
python --version
然后,按下 Enter。
如能正常显示如下所示的 Python 版本号,即表示安装成功:
Python 3.9.7
3.9.7 是本次安装示例的 Python 版本号,具体版本号请参考您安装的 Python 版本。
请参考 Python 官方安装文档。
配置系统环境变量:
可通过安装 Anaconda 自动配置 Python 环境变量。
virtualenv 是一个需要 Python 解释器才能运行的 CLI 工具。其主要作用是为项目创建独立的虚拟运行环境,所有的第三方库(模块包)安装到项目中与其它项目的环境隔开,保证项目的独立性。
使用 pip 安装 virtualenv,以管理员身份运行 cmd,在命令行输入:
pip install virtualenv
然后,按下 Enter,等待安装完成即可。
注意:在运行 cmd 命令时,右键选择以管理员身份运行然后再进行安装操作。否则在运行 virtualenv 时会出现 “'virtualenv' 不是内部或外部命令,也不是可运行的程序”的错误。
在 D 盘中新建一个文件夹 Test。在命令行工具中定位到 D:/Test 目录。使用 virtualenv 创建项目虚拟环境:
virtualenv env
也可以指定 python 版本号:
virtualenv env python=[python版本号] | [python路径]
其中 env 为环境名称,您可以随意取一个名称。完成后 Test 目录下多了一个名为 env 的目录。
接下来,需要激活刚刚创建的项目环境。在命令行工具定位到 D:/Test/env/Scripts 目录,输入:
./activate
按下 Enter,即可激活环境。
激活环境后,控制台命令行路径前多了一个 (env) 的环境标识,控制台命令行路径变为如下格式:
(env) D:\Test\env\Scripts>
关闭环境使用命令:
deactivate
注意:当结束开发的时候一定要及时关闭环境。
requests 是一个简单而优雅的 HTTP 库,通过它就可以向服务器发送接口请求并获取接口响应数据。激活环境后将路径回退到项目根目录 D:/Test,并执行以下命令安装 requests 模块:
pip install requests
在项目根目录新建一个 run.py 文件,引用 requests 模块发送请求,代码如下:
# run.py
import requests
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
print(r.status_code)
输入python run.py命令,运行 run.py 文件:
(env) PS F:\DEMO\Test> python run.py
控制台打印出 200,则接口请求成功。
pytest 是一个成熟的全功能 Python 测试工具,可以帮助您编写更好的测试程序。详细内容请查看官方文档。
执行安装命令:
pip install pytest
当通过 pytest 命令执行用例时,pytest 会自动递归遍历执行路径下所有的目录,根据 pytest 中默认用例的识别的规则,自动收集测试用例。所有在使用 pytest 编写测试用例之前,我们首先需要了解一下 pytest 收集用例时默认的用例识别规则。
pytest 测试用例识别规则如下:
备注:上述默认的用例查找规则,可在 pytest 的配置文件进行修改。
通过了解上述 pytest 中用例识别的规则,可以知道 pytest 中用例编写,能使用函数的形式,也能使用类的形式,那么接下来就分别给大家介绍一下这两种方式编写用例。
函数形式编写用例:
用例方法名以 test_ 开头即可,如下:
def test_demo():
assert 100 == 100
使用命令 pytest 就可以执行测试函数。
类形式编写用例:
测试类命名以 Test_ 开头,用例方法以 test_ 开头,如下:
class Test_Dome:
def test_demo1(self):
assert 11 == 11
def test_demo(self):
assert 22 == 21
在上面我们使用的是 pytest 这个命令去执行测试用例。关于 pytest 执行测试,有两种方式,一种是命令行通过 pytest 这个命令执行,另外在代码中可以通过 pytest.main() 这个方法来执行测试。接下来就和大家分别详细的介绍一下 pytest 执行测试的方式和常用的参数。
pytest.main 执行的参数传递:
import pytest
pytest.main(['-v','-s'])
所以的参数放在列表中,每个参数就是列表中的一个元素。
详细的参数可以使用命令 pytest -h 查看
指定执行的测试目录:
pytest tests/
该命令执行 tests 目录下所有测试文件中的所有测试用例。
指定执行的测试文件:
pytest tests/test_login.py
该命令执行 tests 目录下 test_login.py 文件中所有的测试用例。
指定执行的测试类:
pytest tests/test_login.py::Test_Login
该命令执行 tests 目录下 test_login.py 文件中 Test_Login 类定义的所有测试用例。
指定执行的测试用例:
pytest tests/test_login.py::Test_Login::test_method
该命令执行 tests 目录下 test_login.py 文件中 Test_Login 类定义的 test_method 测试用例。
在项目根目录新建一个 tests 文件夹管理测试文件,并在该文件夹下新建一个 test_demo.py 的测试文件,编写第一个测试函数,代码如下:
def test_passing():
assert(1, 2, 3) == (1, 2, 3)
使用命令 pytest 运行测试函数:
pytest
结果如下:
======================= test session starts =======================
platform win32 -- Python 3.9.7, pytest-7.0.1, pluggy-1.0.0
rootdir: F:\DEMO\Test
collected 1 item
tests\test_demo.py . [100%]
======================== 1 passed in 0.04s ========================
注意:pytest 使用 $\color{red}{.}$ 标识测试成功($\color{red}{PASSED}$),使用 $\color{red}{F}$ 标识测试失败($\color{red}{FAILED}$)。
修改上面使用 requests 模块请求接口的示例,做一个接口测试的例子。修改 test_demo.py 文件,代码如下:
import requests
def test_passing():
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
assert r.status_code == 200
运行测试查看结果。
对于软件测试工作来说,测试报告是非常重要的工作产出。一个漂亮、清晰、格式规范、内容完整的测试报告,既能最大化我们的测试工作产出,又能够减少开发人员和测试人员的沟通成本。
Allure Framework 是一个灵活,轻量级的多语言测试报告工具,它不仅可以非常简洁地表示以整洁的 Web 报告形式显示已测试的内容,而且允许参与开发过程的每个人从日常测试执行中提取最大的有用信息。它支持绝大部分测试框架,比如 TestNG、Junit 、pytest、unittest 等。
将测试结果数据生成测试报告,需安装 Allure 到您的计算机上(Windows 系统下载 zip 安装包并解压即可)。
环境变量配置:
将下载的压缩包解压后,把 bin 目录加入到系统 PATH 中,比如,我将解压后的文件存放的路径是:
D:\allure-2.17.2
那么就需要把如下路径加入到环境变量——>系统变量的 PATH 中:
D:\allure-2.17.2\bin
还需要安装 allure 的 pytest 集成模块:
pip install allure-pytest
修改 tests/test_demo.py 测试文件,代码如下:
import requests
import allure
@allure.story('请求成功')
def test_passing():
params = ('user', 'pass')
with allure.step('设置请求参数,发起请求'):
allure.attach('请求参数:' + ''.join(params), 'Parameters', allure.attachment_type.TEXT)
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=params)
with allure.step('检查接口返回的 code 参数确定请求成功'):
assert r.status_code == 200
allure.attach(str(r.status_code), 'Response', allure.attachment_type.TEXT)
通过 allure 模块添加测试过程的说明,使整个测试报告更加详细明了。
要使 Allure 侦听器能够在测试执行期间收集结果,只需在命令行添加存储结果的文件夹的路径参数即可。例如:
pytest --alluredir=./results
该命令运行测试并将测试结果数据存放在 results 目录中。也可以使用配置文件的方式进行配置,pytest 的配置文件的使用请参考配置文件,在项目根目录新建一个 pytest.ini 文件,文件内容如下:
# pytest.ini
[pytest]
addopts =
--clean-alluredir
--alluredir=./results
testpaths = tests
其中,--clean-alluredir 是指定每次执行测试时都先清空测试结果目录,--alluredir=./results 是指定测试结果存放到 results 目录,testpaths = tests 是指定执行 tests 目录下的测试文件。然后,运行 pytest 命令运行测试完成后将在项目中多了一个 results 目录,里面的 .json .txt 文件就是测试结果内容。
要在测试完成后查看实际报告,需要使用 Allure 命令行实用程序从结果生成报告:
allure serve ./results
此命令将 results 目录中测试结果生成测试报告,并启动本机服务器在默认浏览器中打开测试报告。
如需输出测试报告静态网页文件,使用如下命令格式:
allure generate <测试结果目录> -o <测试报告目录> --clean
如将 result 目录的测试结果数据生成测试报告,并将测试报告存放在 reports 目录。使用如下命令:
allure generate result -o reports --clean
测试报告生成后,使用浏览器打开 reports 目录下的 index.html 文件即可看到报告内容。
YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。Python 将 YAML 配置文件内容转 JSON 格式需要安装 pyyaml,安装命令:
pip install pyyaml
在项目根目录新建一个 config 文件夹,在该文件夹下新建一个 test_demo.yml 文件,编写测试用例配置信息,内容如下:
# 参数正确
-
title: '参数正确,请求成功'
user: user
pass: pass
code: 200
# 缺失user参数
-
title: '缺失user参数,请求失败'
user: ''
pass: pass
code: 401
# 缺失pass参数
-
title: '缺失pass参数,请求失败'
user: user
pass: ''
code: 401
YAML 语法可以参考这个 YAML 入门教程。
在 Pytest 中并不需要额外的库,通过 @pytest.mark.parametrize() 标志即可实现参数化。通过参数传递不同的数据来驱动用例运行,也就是数据驱动。
然后,修改 tests/test_demo.py 文件:
import requests
import pytest
import allure
import yaml
# 读取 yaml 文件内容转字典数据
def load_yaml(path):
with open(path, 'r', encoding='UTF-8') as fs:
data = fs.read()
return yaml.load(data, Loader=yaml.SafeLoader)
@allure.feature('接口测试示例')
@pytest.mark.parametrize('data', load_yaml('./data/test_demo.yml'))
def test_passing(data):
allure.dynamic.title(data['title'])
params = (data['user'], data['pass'])
with allure.step('设置请求参数,发起请求'):
allure.attach('请求参数:' + ' '.join(params), 'Parameters', allure.attachment_type.TEXT)
r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=params)
with allure.step('检查接口返回的 code 参数确定请求成功'):
assert r.status_code == data['code']
allure.attach(str(r.status_code), 'Response', allure.attachment_type.TEXT)
这样就成功的将接口配置信息从 YAML 配置文件中读取出来,并使用到测试用例中。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。