开始做实际项目前,先拿个网上的简单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、大型项目的接口自动化实践记录----数据分离

3、大型项目的接口自动化实践记录----开放API练习的更多相关文章

  1. 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介

    1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...

  2. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

  3. 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比

    上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...

  4. 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果

    上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...

  5. 1、大型项目的接口自动化实践记录--robotframework环境搭建

    因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...

  6. 接口自动化平台搭建(二),搭建django项目与接口自动化平台的由来与功能特征

    1.创建django项目 a.使用命令创建,安装完django之后就有django-admin命令了,执行命令创建即可,命令如下: django-admin startproject my_djang ...

  7. python入门以及接口自动化实践

    一.Python入门必备基础语法# 标识符:python中我们自己命名的都是标识符# 项目名 包名 模块名# 变量名 函数名 类名# 1:字母 下划线 数字组成 命名的时候不能以数字开头# 2:见名知 ...

  8. 19 | 真实的战场:如何在大型项目中设计GUI自动化测试策略

  9. python接口自动化21-规范的API接口文档示例

    前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...

随机推荐

  1. 使用Appium做手机自动化录制问题

    最近在使用appium做Android手机自动化脚本录制, 发现点击“tap”时,一直没有用,页面还是不能跳转. 咋办?发愁... 于是看到旁边有个“sendkeys”,那是不是能够直接发送参数不就行 ...

  2. C++ 洛谷P1230 智力大冲浪

    题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...

  3. 基于SpringBoot从零构建博客网站 - 设计可扩展上传模块和开发修改头像密码功能

    上传模块在web开发中是很常见的功能也是很重要的功能,在web应用中需要上传的可以是图片.pdf.压缩包等其它类型的文件,同时对于图片可能需要回显,对于其它文件要能够支持下载等.在守望博客系统中对于上 ...

  4. NetCore AutoMapper的封装

     需要引用AutoMapper的Nuget包  如果需要忽略某个字段就在字段上面打标签如下:  [IgnoreMap] public string IgnoreValue { get; set; } ...

  5. Greenplum高可用真的高吗?

    目录 1. 问题描述 2. 解决方案 @ 1. 问题描述 在项目中使用了Greenplum做分析型数据库,Greenplum自身已经提供了高可用方案,Master节点提供Sdanby备用节点,Segm ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十一):在小程序中使用 WebSocket (.NET Core)

    本文将介绍如何在 .NET Core 环境下,借助 SignalR 在小程序内使用 WebSocket.关于 WebSocket 和 SignalR 的基础理论知识不在这里展开,已经有足够的参考资料, ...

  7. MMM 数位dp学习记

    数位dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...

  8. 硬件笔记之Thinkpad T470P更换2K屏幕

    0x00 前言 手上的Thinkpad T470P屏幕是1920x1080的屏幕,色域范围NTSC 45%,作为一块办公用屏是正常配置,但是考虑到色彩显示和色域范围,计划升级到2K屏幕. 2k屏幕参数 ...

  9. 学习4:总结# 1.列表 # 2.元祖 # 3.range

    列表 -- list 有序,可变的,索引, 作用:存储数据的,支持很多种数据类型 定义方式: lst = [1,"alex","黑哥"] 增: append 追 ...

  10. Java操作文件

    import java.io.File; import java.io.IOException; import java.nio.file.*; import java.nio.file.attrib ...