使用pytest+openpyxl做接口自动化遇到的问题

最近使用pytest+openpyxl做了个接口自动化的小项目,遇到了一些问题。

首先,使用pytest这个框架,主要是使用了@pytest.fixture, @pytest.mark.parametrize这两个fixture去做参数化,里面注入的数据是用openpyxl来实现的。

接口介绍:

由上,对登录接口做fixture, 以便后两个接口获取其返回的uuid和token。

具体设置如下:

如上图所示,login这个fixture最终返回一个全局变量的字典,字典里保存uuid,token的值,这个值就是登录后的响应内容提取出来的,调用fixture的request参数实现了把接口响应内容的uuid,token保存到全局变量字典gv中。

接着,让2,3两个接口去调用登录这个fixture的返回值以及从excel表格读取的测试用例相关数据进行测试。

第二个fixture--login_tai是用来传递excel表中的测试用例数据,在下面的参数化里使用了这个fixture,并且带上数据来源data_login_tai,login这个fixture来传递uuid,token值,同样都带上数据来源datas. indirect一定要设置为True, 代表是作为函数传进去的。

看接口测试代码部分:

首先调用login_tai这个fixture获取参数部分的值,然后用从login这个fixture返回的uuid,token去替换,让params这个值是有登录的uuid,token值的。最后调用断言工具类AssertUtil.assert_result()方法去对接口进行断言。

整个流程就是这个样子,很简单,从两个fixture中分别获得想要的数据,然后完成参数的替换,和测试数据的组装到发送请求,获得接口响应,最后做断言。问题就出在最后断言部分,总是出问题。

打印出 响应部分的值的类型,才知道接口响应返回的数字一般是int型,而我们存放测试用例的表格中数字肯定都是字符串,所以这里断言Failed了。

把相关代码改一下

这里value_real部分加个str(),去强转下类型,这样就不会因为类型不一样而断言失败了。

这里还要注意多一点:jsonpath.jsonpath(res,key) 这个方法其实返回的是一个列表,因为它会返回第一个成功匹配的元素但是是存放在列表里的,所以这里取值的时候要加个索引,不然又是数据类型不一样。

把代码变成不加索引的,

打印出来它的类型,可以看到如下结果

如上图,响应返回值是list类型,所以为了达到预期值,都要加上索引。

接下来,又发生一件很难理解的问题。如下图,断言部分,响应结果是如下的'msg': '客户端非法请求:token.len应该小于等于64,但现在token.len = 66',和我们在excel表格中设置的assertFields中的值是一样的,但就是断言失败AssertionError

运行了好几次,检查了好几次代码,还是这样,最后,我想着把断言方法里的value和value_real打印出来看看,到底哪里不一样,怎么老是断言失败。

结果打印出来是这样,

最后发现是这里出了问题,我以为是excel表格读取出了问题,但是想想读取其他数据都没问题,不可能是读取出了问题。最后,恍然大悟,因为在断言方法里用了个'='来分割assertFields字符串的值,因为'='右边的值中也有=,才导致了这个问题。

字符串的split()方法这么使用,就是默认使用'='分割,那遇到'='就分割,就会出现上图那样的问题。研究了一会,发现split()还有个用法,就是加上分割次数,就能改变分割结果。重新修改了代码后,再运行代码,就全都断言通过了。

就是这么个分割方法,竟然导致我运行多次代码,都得不到预期的结果。

总结:学习接口自动化,代码基础非常关键,有的时候莫名其妙的问题就是因为代码基础不牢导致的。稍微改动一下,就能影响整个测试过程的走向。

相关推荐
Dream_Snowar36 分钟前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶38 分钟前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
汪洪墩1 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
程序员shen1616112 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
人人人人一样一样3 小时前
作业Python
python
四口鲸鱼爱吃盐3 小时前
Pytorch | 利用VMI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
四口鲸鱼爱吃盐3 小时前
Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
小陈phd3 小时前
深度学习之超分辨率算法——SRCNN
python·深度学习·tensorflow·卷积
CodeClimb3 小时前
【华为OD-E卷-简单的自动曝光 100分(python、java、c++、js、c)】
java·python·华为od