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

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

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

相关推荐
小白学大数据2 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Shy9604183 小时前
Doc2Vec句子向量
python·语言模型
yaosheng_VALVE5 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
秀儿还能再秀6 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
阿_旭7 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准
kali-Myon8 小时前
ctfshow-web入门-SSTI(web361-web368)上
前端·python·学习·安全·web安全·web
B站计算机毕业设计超人8 小时前
计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化