zoukankan      html  css  js  c++  java
  • 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、大型项目的接口自动化实践记录----数据分离

  • 相关阅读:
    23种设计模式总篇
    23种设计模式之抽象工厂
    23种设计模式之原型模式
    23种设计模式之适配器模式
    23种设计模式之工厂模式
    23种设计模式之模板方法
    Cloudera Manager 5和CDH5离线安装
    ArrayList vs. LinkedList vs. Vector
    在Java中怎样把数组转换为ArrayList?
    两个有序数组的中位数 【算法】
  • 原文地址:https://www.cnblogs.com/walkingtester/p/11280612.html
Copyright © 2011-2022 走看看