前言
本期是我们《保姆级Pytest接口自动化测试框架实战指南》系列中的核心功能,Pytest框架串联了整个自动化测试框架始终。
随着软件的不断复杂化,手动测试已经无法满足快速迭代和高质量的要求。所以自动化测试框架变得越来越重要,特别是Pytest,一个出色的Python单元测试框架。
本文将教你如何在Pycharm中使用Pytest框架进行接口自动化测试,主要分为以下几个部分:
-
环境准备
-
安装必要的插件
-
安装必要的插件
-
运行测试用例和报告生成
1. 环境准备
在开始之前,需要确保你掌握以下技术:
-
Python 3.x
-
Pycharm IDE
除了Pycharm,还可以使用一些其他的编辑器用于编写代码:
-
Pycharm
-
VS Code
-
Sublime Text
-
Atom
2. 安装必要的插件
2.1 Pytest
Pytest
是一个功能强大且可扩展的Python测试框架,可以用于编写各种类型的测试用例。相比其他测试框架,Pytest具有以下优点:
- 简单易学:使用简单而直观的API,易于入门。
- 自动化发现测试用例:Pytest可以自动发现测试用例并执行,无需手动管理测试套件。
- 参数化测试:Pytest可以轻松地使用参数化的方式运行测试用例,从而减少冗余代码。
- 断言支持:Pytest可以使用Python的assert语句进行断言,无需学习新的API。
- 多个插件扩展:Pytest拥有众多扩展插件,可以满足各种测试需求。
安装pytest插件的步骤如下:
1.打开Pycharm IDE。
2.点击“文件” -> “设置”,在左侧面板中选择“插件”。
3.在搜索框中输入“pytest”,然后点击“安装”按钮即可。
2.2 Pytest-html
Pytest-html
插件可以将Pytest测试结果以HTML格式呈现,使得测试报告更加美观易读。安装pytest-html插件的步骤如下:
1.打开Pycharm IDE。
2.点击“文件” -> “设置”,在左侧面板中选择“插件”。
3.在搜索框中输入“pytest-html”,然后点击“安装”按钮即可。
3. 编写测试用例
3.1 测试用例文件结构
在编写测试用例之前,我们需要了解测试用例文件应该包括哪些内容。测试用例文件应包括以下三个部分:
3.1.1 导入库
测试用例应该开始于导入所需的Python库。
import requests
import json
3.1.2 定义测试函数
测试用例文件应包括一个或多个测试函数。每个测试函数应以"test_"开头,并包含所需的断言语句。例如:
def test_response_code():
url = "http://localhost:8080/posts/1"
response = requests.get(url)
assert response.status_code == 200
其中,函数名称应该遵循以下规则:
- 函数名称应该清晰明了,能够表达被测试的功能或特性。
- 函数名称应该以“test_”开头,这是Pytest自动识别测试用例的规则。
- 函数名称可以使用下划线分隔单词。
在上述代码中,url应该被替换为你要测试的接口URL地址。
3.1.3 定义测试用例
测试用例文件应包括一个或多个测试函数。每个测试函数应以"test_"开头,并包含所需的断言语句。例如:
def test_response_code():
url = "http://localhost:8080/posts/1"
response = requests.get(url)
assert response.status_code == 200
其中,函数名称应该遵循以下规则:
- 函数名称应该清晰明了,能够表达被测试的功能或特性。
- 函数名称应该以“test_”开头,这是Pytest自动识别测试用例的规则。
- 函数名称可以使用下划线分隔单词。
在上述代码中,url应该被替换为你要测试的接口URL地址。
3.2 编写测试用例
在编写测试用例时,我们需要遵循以下规则:
3.2.1 函数名称
测试函数应该以“test_”开头,这是Pytest自动识别测试用例的规则。例如:
def test_response_code():
...
3.2.2 断言语句
每个测试函数应包含所需的断言语句,用于验证接口返回值是否符合预期。例如:
assert response.status_code == 200
3.2.3 文件名称
测试用例文件的命名应该以“test_”开头,以“_test.py”结尾。例如,“test_example.py”是一个有效的文件名。
3.2.4 用例名称
每个测试函数应该具有一个描述性的名称,可以使用下划线分隔单词。例如:
def test_response_code():
...
def test_response_content():
...
3.3 示例代码
在Pycharm中创建一个新文件,并编写测试用例代码。以下是一个简单的示例:
import requests
import json
def test_response_code():
url = "http://localhost:8080/posts/1"
response = requests.get(url)
assert response.status_code == 200
def test_response_data():
url = "http://localhost:8080/posts/1"
response = requests.get(url)
data = response.json()
assert data["title"] == "sunt aut facere repellat provident occaecati excepturi optio reprehenderit"
def test_create_post():
url = "http://localhost:8080/posts"
headers = {'Content-Type': 'application/json'}
data = {"title": "Test Post", "body": "This is a test post", "userId": 1}
response = requests.post(url, headers=headers, data=json.dumps(data))
assert response.status_code == 201
这个示例包括了三个测试用例:
- test_response_code:测试接口的响应状态码是否为200。
- test_response_data:测试接口返回的数据是否正确。
- test_create_post:测试创建新的文章是否成功。
3.4 运行测试用例
完成测试用例的编写后,我们可以在Pycharm中运行测试用例。在Pycharm中右键点击测试用例文件,然后选择“Run 'pytest in'...”选项即可。
也可以在脚本中通过主函数运行,在测试文件的末尾添加以下代码即可:
if __name__ == '__main__':
pytest.main(["-s", "-v", "test_file.py", "--html=report.html"])
其中,"-s"
和"-v"
参数用于显示测试结果的详细信息,"test_file.py"
是测试文件名,"--html=report.html"
用于生成 HTML 格式的测试报告。
在运行测试用例时,Pytest会自动发现所有以“test_”
开头的函数,并执行它们。如果所有的测试用例都通过,则测试结果将显示为“PASSED”
,否则将显示为“FAILED”
。
4. 生成测试报告
使用pytest-html
插件可以方便地在Pycharm中生成测试报告。以下是生成测试报告的步骤:
在终端中安装pytest-html
插件:
pip install pytest-html
在运行测试用例时,添加参数“—html=report.html”来生成HTML格式的测试报告。例如:
pytest tests.py --html=report.html
等待测试用例执行完毕后,在Pycharm项目文件夹下可以找到report.html文件,双击打开即可查看测试报告。
总结
本文介绍了如何在Pycharm中使用Pytest框架进行接口自动化测试。
首先需要准备Python和Pycharm环境,并安装必要的插件。然后编写测试用例,使用Pytest执行测试用例,并生成测试报告。通过这篇文章,相信你已经掌握了如何使用Pytest框架进行接口自动化测试的基本技能。