接口测试平台代码实现78: 多接口用例-18

简介: 接口测试平台代码实现78: 多接口用例-18

本节我们继续上节,上节我们设定了两种提取返回值的方式。

如图:

微信图片_20220625110130.png

我们本节就来实现它:


打开run_case.py,找到这空白区域:

微信图片_20220625110137.png

我们需要先思考一下。如何进行提取和持久化的设计,也就是说不能光提取就行,需要存放到哪,以便后续接口进行调用:

我们先按照路径法,提取出来。

注意:因为有些接口返回值并不是json格式字串,而路径法又只能是识别提取json格式。

为了方便调试,我这里要用一个真实的接口进行测试。大家也可以找找可调通的其他接口做测试。微信图片_20220625110143.png

接口信息如下:

请求方式:get

url:

/sugrec?prod=pc_his&from=pc_web&json=1&sid=32812_1464_33049_330593099_33101_32962_32846_22160&hisdata=&_t=1606109114553&req=2&csor=0

host:


https://www.baidu.com

header:


{}

请求结果:


{"err_no":0,"errmsg":"","queryid":"0xc5e746e385f8d9"}

这里我们可以看到 这是一个返回值是json的接口。并且所有人都可以访问。


我们新建一个大用例和其小步骤,并套用这个接口库的接口:

微信图片_20220625110149.png


然后我对其的路径法提取设置为:

微信图片_20220625110154.png

提取那一串0xc5e...并设计其的对象名为qid

我们在run_case.py中先试着把这串设置提取出来微信图片_20220625110201.png

然后运行下该用例,看看输出:微信图片_20220625110206.png

然后我们对其返回值按照这个进行提取:微信图片_20220625110211.png

因为这是一个按换行符分开的 列表。所以用for循环遍历每行,这个i就是每行,然后再对其用=号分割,左边就是我们的对象名字key,右边就是路径值path。

接下来要对这个path进行实际解析,好方便拿到真实值:微信图片_20220625110217.png

这个解析的过程中,我们对path用/进行分割,然后分别判断每一段,如果不是[开头,那说明是提取的是字典key,否则就是[数字]这样的列表下标。所以一开始设置的空字串py_path 要逐个累加解析过的每一段。我们最终打印一下,看看是什么:微信图片_20220625110222.png

可以看出,我们删掉了/ ,换成了[] 这样就可以直接 在字典后加上,直接提取了:比如字典 :{"a":1} 我们提取的时候就构造出字符串:{"a":1}["a"] 即可提取到值1。

继续写:微信图片_20220625110228.png

注意看前两句,第一句意思是我们提取出了这个值,第二句是把这个值给到了一个用户自己设置的变量里。  

理论上,我们遍历完这个循环后,俩个变量qid和en都生成了,我们打印一下看看对不对。为什么要加self.呢?因为要给他们做成类变量,好方便后续生成的def步骤用例函数调用。(这里后续到底能不能调用成功,先留个悬念,可如果调用不成功,这里还是要改的~)微信图片_20220625110236.png

重启服务,刷新页面,运行效果如下:微信图片_20220625110243.png

看来提取成功了,并且值的类型 还是对的。


好了,我们如法炮制,把正则法提取的代码也写出来。正则就更好办了,因为用户已经为我们写好了正则语法的左右边界等:微信图片_20220625110249.png

(这里有同学在群里问,这里username后面的单引号是什么意思,其实没意思,就是我们截取的左边界 也就是这个json里,username人家本来后面就带了单引号或双引号。这里确实是我解释的不到位,大家可以多加些备注等,正则也可以处理各种格式返回值的提取)微信图片_20220625110256.png

按照实际返回值,写好左右边界,中间要提取的部分用(.*?)代替微信图片_20220625110302.png

这里我们要注意一下,正则提取出来的东西,我们很难确定它的值的类型,因为如果真实返回值是如: "a":"1" 这时候,然后恰好用户又设置成: a":"(.*?)" 这样,那我们取到的只是1 ,我们不能擅作主张的把这个1变成整形,因为这个1的确是字符串“1”,而且也可能是使用者不是写错 而是故意要取出来当作整形或者字符串,所以为了避免这种纠纷,我暂时规定正则提取出来的全部按照字符串处理~也欢迎大家集思广益,提出更妥善的方案,其中也要考虑我们擅自把1变成整形尚且不表,把abc也变成整形就会报错的情况。


具体代码如下:微信图片_20220625110308.png

重启服务,运行脚本看看效果,别忘了设置的要保存再运行:微信图片_20220625110314.png

成功之后,我们还有些后续问题要处理:


就是使用者不小心在 =号左右加了空格,这个是pep8语法遵循者常用的写法。我们的设置中=号左右都没空格,但是一不小心,写了一个空格 或者俩个,怎么办呢?微信图片_20220625110319.png

其实我们只要在代码中 对其提取的时候,自动删掉空格即可,但不是删掉所有空格,只是key的右侧空格,和path/zz的左侧空格而已:微信图片_20220625110329.png

运用的方法仅仅是在后面加 .rstrip 或者.lstrip

带着空格保存 重启服务 ,运行用例,看看报告:微信图片_20220625110338.png

这次我们全部打印:微信图片_20220625110345.png

可以看到全部打印出来了。


这段提取代码复制版本如下:

# # 路径法提取:
if get_path != '': #说明有设置
    for i in get_path.split('\n'):
        key = i.split('=')[0].rstrip()
        path = i.split('=')[1].lstrip()
        py_path = ""
        for j in path.split('/'):
            if j !='':
                if j[0] != '[':
                    py_path += '["%s"]'%j
                else:
                    py_path += j
        value = eval("%s%s" % (json.loads(res), py_path))
        exec('self.%s = value '%key)
# # 正则法提取:
if get_zz != '': #说明又设置
    for i in get_zz.split('\n'):
        key = i.split('=')[0].rstrip()
        zz = i.split('=')[1].lstrip()
        value = re.findall(zz,res)[0]
        exec('self.%s = "%s" '%(key,value))

本节内容还差个小尾巴,就是在一开始,可能有的同学注意到,接口库因为接口url太长,导致按钮排版出现问题:

微信图片_20220625110351.png

这其实就是我们没有对“操作”这栏 的宽度写成了固定的,结果被url这种比例宽度给欺负了的后果:

这里我们简单点处理,把操作这栏的宽度设置 改成 最小 宽度。这样就防止它被欺负了:微信图片_20220625110400.png

效果如下:微信图片_20220625110407.png

我们发现,接口名称又被欺负了,那么我们再给接口名称变成最小宽度:微信图片_20220625110413.png微信图片_20220625110419.png


但是这样做之后,显然浏览器又被url给撑破了,连滚动条都出来了。而且页面看着也很乱,这么一大坨url放着。


所以我们还有另一个办法,我们不要让url显示这么长就好了。


这个操作我在后台进行切割比较易于理解,前端html我们重新设置宽度比例吧:微信图片_20220625110426.png

我们找到进入用例库页面的后台函数中控制数据的函数child_json:微信图片_20220625110433.png

我们给每个接口api,都新增了一个short_url,值为原始url的?号前面路由的部分,并且最大只要前50个字符串。


然后前端中我们展示的也不再是api_url了,而是short_url:微信图片_20220625110439.png

重启服务,看看效果:微信图片_20220625110443.png

现在整洁很多,而且没有破坏原始数据:微信图片_20220625110449.png

相关文章
|
2月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
27天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
169 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
1月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
98 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
1月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
64 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
8天前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
2月前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
95 35
|
2天前
|
监控 API 开发工具
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。
|
2月前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
48 16
|
21天前
|
小程序 测试技术 数据安全/隐私保护
微信公众号接口测试实战指南
微信公众号接口测试是确保系统稳定性和功能完整性的重要环节。本文详细介绍了测试全流程,包括准备、工具选择(如Postman、JMeter)、用例设计与执行,以及常见问题的解决方法。通过全面测试,可以提前发现潜在问题,优化用户体验,确保公众号上线后稳定运行。内容涵盖基础接口、高级接口、微信支付和数据统计接口的测试,强调了功能验证、性能优化、安全保护及用户体验的重要性。未来,随着微信生态的发展,接口测试将面临更多挑战和机遇,如小程序融合、AI应用和国际化拓展。
|
2月前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。

热门文章

最新文章