python+pytest接口自动化

您所在的位置:网站首页 写脚本需要哪些知识点呢 python+pytest接口自动化

python+pytest接口自动化

2024-07-15 14:32:17| 来源: 网络整理| 查看: 265

经过之前的学习铺垫,我们尝试着通过编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。

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

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

一. 明确测试对象

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

找到对应的接口也就是测试对象之后,才能有目的地进行下一步。

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

通过抓包我们抓取到了该接口的信息如下:

请求url:https://weathernew.pae.baidu.com/weathernew/pc

请求方式:GET

请求参数:{"query": "浙江杭州天气", "srcid": 4982}

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

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)

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

3,明确需求,确定用例。

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

我们来分析一下示例的这个天气查询接口,主要有两个测试点:

正向请求:输入存在的城市,能查找对应城市的天气

异常请求:输入不存在的城市,提示错误

二. 编写测试用例

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

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

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

1. 构造请求数据

正向请求,数据如下:

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

异常请求,数据如下:

params = {  "query": "微信公众号:测试上分之路",     "srcid": 4982 }

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

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

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

2. 封装测试代码

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

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": "微信公众号:程序员小濠",             "srcid": 4982         }         res = requests.get(url=url, params=params)

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

3. 断言设置

断言,即校验结果是否是我们期望的内容。

设置断言时,我们需要先明确校验哪些字段。一般而言,接口响应的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 三. 执行脚本获取测试结果

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

完整示例代码如下:

# @time: 2022-03-20 # @author: 给你一页白纸 # 微信公众号:测试上分之路 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": "微信公众号:测试上分之路",             "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中流行的unittest、pytest等测试框架。这里我们使用的是pytest,关于pytest的使用可以查看往期的【pytest系列文章】。

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

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

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

这些对想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源免费分享~



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭