使用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()还有个用法,就是加上分割次数,就能改变分割结果。重新修改了代码后,再运行代码,就全都断言通过了。

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

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

相关推荐
这里有鱼汤19 分钟前
“对象”?对象你个头!——Python世界观彻底崩塌的一天
后端·python
尘浮72828 分钟前
60天python训练计划----day59
开发语言·python
wh393331 分钟前
使用Python将PDF转换成word、PPT
python·pdf·word
船长@Quant1 小时前
数学视频动画引擎Python库 -- Manim Voiceover 语音服务 Speech Services
python·数学·manim·动画引擎·语音旁白
好开心啊没烦恼2 小时前
Python 数据分析:计算,分组统计1,df.groupby()。听故事学知识点怎么这么容易?
开发语言·python·数据挖掘·数据分析·pandas
lljss20203 小时前
Python11中创建虚拟环境、安装 TensorFlow
开发语言·python·tensorflow
空中湖3 小时前
tensorflow武林志第二卷第九章:玄功九转
人工智能·python·tensorflow
CodeCraft Studio4 小时前
CAD文件处理控件Aspose.CAD教程:使用 Python 将绘图转换为 Photoshop
python·photoshop·cad·aspose·aspose.cad
Python×CATIA工业智造6 小时前
Frida RPC高级应用:动态模拟执行Android so文件实战指南
开发语言·python·pycharm
onceco7 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化