3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手
一、API说明:
接口信息
接口名:京东获取单个商品价格
入参:skuids=J_商品ID&type=1
接口返回:[{"cbf":"","id":"","m":"","op":"","p":""}]
skuids说明:可通过具体页面查看,如http://item.jd.com/954086.html,页面中商品ID为954086
浏览器访问接口
我们在浏览器访问URL:http://p.3.cn/prices/mgets?skuIds=954086&type=1
可以看到,结果为[{"cbf":"0","id":"J_954086","m":"859.00","op":"459.00","p":"-1.00"}]
二、robotframework实现
首先先建一个测试用例:
右键suite,弹窗点击New Test Case
输入测试用例名,点击OK:
按照上一篇提过的,要先跟服务器打个招呼
1、跟服务端打招呼:Create Session
如下就是跟http://p.3.cn打招呼,而headers可以理解为外表及打招呼的方式
2、打完招呼,服务器会给予回应,收到回应后,则开始请求对方做具体的事情:Get Request
如下就是跟对方说,我想看一下商品ID为J_95046的价格信息。
3、以上就完成了与服务器的交互,执行用例看一下结果
可以看到,返回的是<Response[200]>,好像不是我们预期的文本,那是因为它是一个对象
4、上一步获取到的结果${resp}是个对象,而一般我们会想要接口返回的编码、json串内容或文本,那要怎么解析它呢。
${resp.status_code}:返回的编码
${resp.text}:返回的文本
To Json ${resp.content}:把内容转为json串
结果如上图,编码、文本等都是resp的属性,更多resp对象属性说明见下图:
5、获取到了实际结果,作为测试用例,还少一个跟预期结果对比:
①简单对比:返回的编码为指定值,返回的文本包含指定key
如果不等会怎样呢,我们把上面预期结果的状态码改成201,则会报如下错
②对比返回的文本中指定key的具体值,如p的值
${result}是一个list
${result[0]}取到第一个值,即{"cbf":"0","id":"J_954086","m":"859.00","op":"459.00","p":"-1.00"}
${result[0]['p']}则取到的是p的值
③全文本对比,这种方式数据稍微有变化,就不可用
就如这个案例中,用上述的方式对比,结果会报错
看上去两个数据明明一样,结果它却报不等
获取两者长度对比,才发现,前者比后者多一个字段,发现是文本的最后多了个空格。
④返回的json与预期的json对比
通过To Json,把content转为json格式,然后自己构造一个完全一样格式的变量,然后对比
⑤全文本与数据库查询结果对比
从数据库中查询出对应的值,然后类似④中构造出一个格式一样的变量,然后对比
④、⑤中对比,都有个问题,如果两者不相等,需要肉眼观察不等的原因,如果两个json串数据量很大,则比较难找到错误的原因
两者使用递归对比,实现难度会高点,好处是更准确、后续定位错误容易、维护工作量极低,具体后面再说。
上一篇 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
3、大型项目的接口自动化实践记录----开放API练习的更多相关文章
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比
上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...
- 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果
上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...
- 1、大型项目的接口自动化实践记录--robotframework环境搭建
因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...
- 接口自动化平台搭建(二),搭建django项目与接口自动化平台的由来与功能特征
1.创建django项目 a.使用命令创建,安装完django之后就有django-admin命令了,执行命令创建即可,命令如下: django-admin startproject my_djang ...
- python入门以及接口自动化实践
一.Python入门必备基础语法# 标识符:python中我们自己命名的都是标识符# 项目名 包名 模块名# 变量名 函数名 类名# 1:字母 下划线 数字组成 命名的时候不能以数字开头# 2:见名知 ...
- 19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略
- python接口自动化21-规范的API接口文档示例
前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...
随机推荐
- asp.net core 系列之Dependency injection(依赖注入)
这篇文章主要讲解asp.net core 依赖注入的一些内容. ASP.NET Core支持依赖注入.这是一种在类和其依赖之间实现控制反转的一种技术(IOC). 一.依赖注入概述 1.原始的代码 依赖 ...
- leadcode的Hot100系列--64. 最小路径和--权值最小的动态规划
如果这个: leadcode的Hot100系列--62. 不同路径--简单的动态规划 看懂的话,那这题基本上是一样的, 不同点在于: 1.这里每条路径相当于多了一个权值 2.结论不再固定,而是要比较不 ...
- mongoshell 执行JavaScript文件获取数据库实例基本信息
由于MongoDB没有关系型数据中强大的数据字典.因此,如果需要汇总统计一些内部信息,包括数据量,基本元信息,集群架构,状态信息.则需要自己写脚本统计.为日后工作方便,本人在此将一些统计信息通过Jav ...
- 在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件
DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...
- sqlserver、oracle数据库排序空值null问题解决办法
转:https://www.cnblogs.com/pacer/archive/2010/03/02/1676371.html [sqlserver]: sqlserver 认为 null 最小. 升 ...
- [AI开发]目标跟踪之行为分析
基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...
- OCR文字识别笔记总结
OCR的全称是Optical Character Recognition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别,交通路牌的识别,车牌的自动识别等等.本 ...
- TCP UDP (转)
互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作 ...
- [奇思异想]使用RabbitMQ实现定时任务
背景 工作中经常会有定时任务的需求,常见的做法可以使用Timer.Quartz.Hangfire等组件,这次想尝试下新的思路,使用RabbitMQ死信队列的机制来实现定时任务,同时帮助再次了解Rabb ...
- [ERROR]:INST-07008: Oracle 主目录(O) 位置的验证失败。用户没有创建主目录/实例位置的权限
安装weblogic12.1.3.0时,输入的安装命令是: 老是报这个错误. 百度半天好像没人报过这错……看来只有我这么粗心了…… 后来发现wls.rsp里面的Oracle_HOME指向目录错误,修改 ...