最强,Python接口自动化测试-自动化用例编写(超细整理)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

我们在百度搜索天气查询,会出现如下图所示结果:

最强,Python接口自动化测试-自动化用例编写(超细整理)_第1张图片

接下来,我们以该天气查询接口为例,编写接口测试用例脚本。

1、明确测试对象

针对某个功能做接口测试,首先我们需要确定实现这个功能调用的是哪个接口,这个接口的具体信息(如功能、协议、URL、请求方法、请求参数说明、响应参数说明等等)可以通过查看开发提供的接口文档获取。

也可以通过抓包(在没有接口文档的情况下)获取。找到对应的接口也就是测试对象之后,才能有目的的进行下一步。

①这里显然是没有接口文档提供接口相关的信息的,我们甚至都不知道请求url,那么先Fiddler抓包获取接口信息。

最强,Python接口自动化测试-自动化用例编写(超细整理)_第2张图片

通过抓包得到了该接口的信息如下:

请求url:https://weathernew.pae.baidu.com/weathernew/pc
请求方式:GET
请求参数:

②抓取到以上这些接口信息后,我们先编写简单的脚本请求该接口,如下:

url = "https://weathernew.pae.baidu.com/weathernew/pc"
params = {
	"query": "浙江杭州天气",
	"srcid": 4982
}
res = requests.get(url=url, params=params)
print(res.status_code)
print(res.text)

运行代码,接口调试通过,能获取到结果,如下:

最强,Python接口自动化测试-自动化用例编写(超细整理)_第3张图片

③明确需求,确定用例
我们在针对某个接口做自动化测试时,需要先明确用例需要验证的测试点。有些接口既要进行正向的校验,也要进行异常的校验,而有些接口可能在自动化时只需要进行正向校验就够了,无需做异常校验。

我们来分析一下示例的这个天气查询接口,主要有两个测试点:
正向请求:输入存在的城市,能查找对应城市的天气
异常请求:输入不存在的城市,提示错误

2、编写测试用例

编写测试用例时,我们需要将代码进行封装,可以封装成测试类/方法、测试函数。pytest中对用例封装的命名方式有要求,详细请参考我之前的文章pytest测试命名规则。

至于封装成类还是函数,其实没什么特定的要求,一般同一个场景或同一个测试点相关的接口可以定义成一个类。

同时用例还需要设置断言,用于校验返回内容是否为期望的内容。测试用例一定要进行断言,否则毫无意义。

构造请求数据
正向请求,数据如下:

params = {
	"query": "浙江杭州天气",
    "srcid": 4982
}

异常请求,数据如下:

params = {
	"query": "微信公众号:xxxxx",
    "srcid": 4982
}

正向请求的结果我们在上面调试请求该接口的时候已经拿到了,如上面的截图。

我们来看下异常请求的结果,为后续设置断言做准备,结果如下:

最强,Python接口自动化测试-自动化用例编写(超细整理)_第4张图片

发送异常请求后,返回的code也是200,结果中会出现暂未开通此城市查询,且没有出现正向请求中的window.tplData内容。

封装测试代码:
这里是针对同一个接口的两条不同的测试用例,我们直接封装一个测试类,专门用于测试该接口。

示例代码如下:

class TestWeather:
    '''
    校验百度天气查询接口:https://weathernew.pae.baidu.com/weathernew/pc
    '''

    def test_get_weather_normal(self):
        '''正向校验-查询存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "浙江杭州天气",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)


    def test_get_weather_error(self):
        '''异常校验-查询不存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "微信公众号:xxxxx",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)

注意:代码里还没有进行断言,不能算是完整的用例。这里我只是为了说明流程而把断言放到下一步,分析后再写断言。

断言设置:
断言,即校验结果是否是我们期望的内容。pytest怎么进行断言请参考文章pytest-断言。

设置断言时,我们需要先明确校验哪些字段。一般而言,接口响应的code都需要断言,status_code == 200则说明接口请求通了。然后再去断言其他必要字段,从而校验接口功能是否实现。

由上面的结果可知,正向请求可以进行如下断言:

# 断言code是否等于200,存在则该断言通过
assert res.status_code == 200

# 断言结果中是否存在"window.tplData",存在则该断言通过
assert "window.tplData" in res.text

由上面的结果可知,异常请求可以进行如下断言:

# 断言code是否等于200,存在则该断言通过
assert res.status_code == 200

# 断言结果中是否存在"window.tplData",注意这里是不存在则该断言通过
assert "window.tplData" not in res.text

# 断言结果中是否存在"暂未开通此城市查询",存在则该断言通过
assert "暂未开通此城市查询" in res.text

3、执行脚本获取测试结果

使用pytest框架管理执行用例时,需要先安装pytest,并在模块中import,不清楚的同学可以查看我的pytest系列文章,这里不做过多说明。

完整示例代码如下:

import requests
import pytest


class TestWeather:
    '''
    校验百度天气查询接口:https://weathernew.pae.baidu.com/weathernew/pc
    '''

    def test_get_weather_normal(self):
        '''正向校验-查询存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "浙江杭州天气",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)
        # print(res.status_code)
        # print(res.text)
        assert res.status_code == 200
        assert "window.tplData" in res.text


    def test_get_weather_error(self):
        '''异常校验-查询不存在的城市的天气'''
        url = "https://weathernew.pae.baidu.com/weathernew/pc"
        params = {
            "query": "微信公众号:xxxxx",
            "srcid": 4982
        }
        res = requests.get(url=url, params=params)
        print(res.status_code)
        print(res.text)
        assert res.status_code == 200
        assert "window.tplData" not in res.text
        assert "暂未开通此城市查询" in res.text

        
if __name__ == '__main__':
    # 使用pytest执行用例
    pytest.main()

当然,这里因为url是共用的,我们最好是将它提取出来,而不是每个测试方法都去定义一次这个变量,如下图所示:

最强,Python接口自动化测试-自动化用例编写(超细整理)_第5张图片

执行结果如下:

最强,Python接口自动化测试-自动化用例编写(超细整理)_第6张图片

单个接口自动化测试用例,我们可以按照上面的步骤来进行,即 明确测试对象–>编写测试用例–>编写测试脚本–>执行脚本、获取测试结果。

事实上使用编程语言对项目进行自动化测试时,几乎不可能只存在一条测试用例,那么在有多条测试用例的情况下,需要怎样管理用例、执行用例、获取测试结果?这就是单元测试框架需要解决的问题。
可以使用pytest单元测试框架。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

最强,Python接口自动化测试-自动化用例编写(超细整理)_第7张图片

二、接口自动化项目实战

最强,Python接口自动化测试-自动化用例编写(超细整理)_第8张图片

三、Web自动化项目实战

最强,Python接口自动化测试-自动化用例编写(超细整理)_第9张图片

四、App自动化项目实战

最强,Python接口自动化测试-自动化用例编写(超细整理)_第10张图片

五、一线大厂简历

最强,Python接口自动化测试-自动化用例编写(超细整理)_第11张图片

六、测试开发DevOps体系

最强,Python接口自动化测试-自动化用例编写(超细整理)_第12张图片

七、常用自动化测试工具

最强,Python接口自动化测试-自动化用例编写(超细整理)_第13张图片

八、JMeter性能测试

最强,Python接口自动化测试-自动化用例编写(超细整理)_第14张图片

九、总结(尾部小惊喜)

人生如逆水行舟,不进则退。只有奋斗,才能超越现状,追求更美好的未来。勇往直前,坚持不懈,化压力为动力,创造属于自己的辉煌。相信自己,你就是无限可能的创造者!

不要害怕失败,因为失败是成功的前奏;不要畏惧困境,因为困境是成长的催化剂。坚持努力,超越自我,用汗水浇灌梦想的花朵,绽放属于你的辉煌!

奋斗是拥抱挑战的勇气,努力是追逐梦想的动力。在人生的旅途中,不屈不挠、坚韧不拔,才能收获自己向往的辉煌。相信自己的能力,勇往直前,用汗水书写奋斗的传奇!

你可能感兴趣的:(软件测试,接口自动化测试,测试用例,软件测试,软件测试工程师,自动化测试,自动化测试框架,测试用例,python自动化测试,pytest自动化测试框架)