5分钟学会用pytest进行自动化测试

发布时间:2023年12月23日

Pytest作为广泛使用的Python测试框架之一,可以用于单元测试、功能测试、性能测试等场合。自动化测试是功能测试的一种形式,可以使用Pytest编写并管理自动化测试用例,再执行相应的自动化测试。

功能测试通常包括接口测试和Web测试两种类型,任何一个测试类型都可以通过Pytest框架来实现。本文以接口测试为例,讲解如何使用Pytest进行自动化测试。

如果想要进行Web自动化测试,只需要将代码中涉及接口测试API改为适用于Web自动化测试的API即可,而整体框架与执行方式则基本一致。

1. 编写测试用例

1)编写简单的测试用例

假设我们想要测试百度首页API接口,用户发出的请求是否合法,并检查响应文本是否包含字符串、“百度一下”。

代码实例:

import requests
 
def test_baidu():
 
    # 发送API请求
 
    response = requests.get('https://www.baidu.com')
 
    # 判断响应状态码及响应文本是否符合预期结果。
 
    assert response.status_code == 200
 
    assert "百度一下" in response.text

上述代码中定义了`test_baidu()`作为测试函数名,它是一个基本测试用例。在这个示例用例中,代码会向API发送GET请求,并断言响应的状态码为200,且响应文本中包含“百度一下”这几个关键字。

2)编写参数化测试用例

在实际测试中通常需要对多组数据进行测试。这时参数化测试用例就派上用场了。它可以轻松地对多组数据进行测试,避免手动重复编写测试用例。

代码实例:

import requests
 
import pytest
 
# 声明数据
 
data = [
 
    {'url': 'https://www.baidu.com', 'expected': '百度一下'},
 
    {'url': 'https://cn.bing.com/', 'expected': 'bing'}
 
]
 
@pytest.mark.parametrize('case', data)
 
def test_web(case):
 
    url = case['url']
 
    expected = case['expected']
 
    # 发送API请求,并断言响应的状态码为200,并检查响应文本是否符合预期结果
 
    response = requests.get(url)
 
    assert response.status_code == 200
 
    assert expected in response.text

上述代码中使用`pytest.mark.parametrize`来实现参数化。其中,“case”是参数名称。“data”列表内包含了多组测试数据。通过for循环遍历每一组测试数据,并参考预置的策略执行具体的测试任务。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处:

2024年Python自动化测试全套保姆级教程,70个项目实战,3天练完,永久白嫖...

2. 运行测试用例

用例编写完成后,一定要进行自测,保证测试用例测试结果的准确性和一致性,测试用例本身没有问题,方可接入自动化测试。

Pytest来执行测试用例非常简单,只需要在命令行中输入`pytest`即可

3. 查看测试结果

所有测试用例执行完成后,pytest会给出测试结果,若用例都执行通过,测试结果会显示如下信息:

若有测试用例未能通过,执行结果会给出失败消息和失败原因,测试人员需要根据测试结果,找到执行失败的测试用例,并对其进行分析,判断是测试用例本身的问题,还是发现了程序的bug。

使用pytest做自动化测试,编写测试用例,需要遵循最佳的代码规范,并且考虑到各种边界情况和异常情况。同时,善于使用参数化和其他高级功能,提高自动化测试的可靠性、可维护性,保证自动化测试的顺畅执行。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

文章来源:https://blog.csdn.net/huace3852/article/details/135170318
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。