在Pycharm中搭建Pytest接口自动化测试框架

前言

       本期是我们《保姆级Pytest接口自动化测试框架实战指南》系列中的核心功能,Pytest框架串联了整个自动化测试框架始终。
       随着软件的不断复杂化,手动测试已经无法满足快速迭代和高质量的要求。所以自动化测试框架变得越来越重要,特别是Pytest,一个出色的Python单元测试框架。
       本文将教你如何在Pycharm中使用Pytest框架进行接口自动化测试,主要分为以下几个部分:

  1. 环境准备
  2. 安装必要的插件
  3. 安装必要的插件
  4. 运行测试用例和报告生成

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框架进行接口自动化测试的基本技能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容