3、大型项目的接口自动化实践记录----开放API练习

开始做实际项目前,先拿个网上的简单API练下手

一、API说明:

接口信息

接口名:京东获取单个商品价格

地址:http://p.3.cn/prices/mgets

入参: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关键字简介

下一篇  4、大型项目的接口自动化实践记录----数据分离

posted on 2019-08-01 09:39  慢慢走的测试  阅读(1107)  评论(0编辑  收藏  举报