VOL 117

29

2020-04

今天距2020年246天

这是ITester软件测试小栈第117次推文

点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 07:30准时推送。

微信公众号后台回复“资源”、“测试工具包”领取测试资源,回复“21天打卡”一起学习成长,打怪升级。

本文4829字,阅读约需13分钟

在上一篇Python接口自动化测试系列文章:Python接口自动化之unittest单元测试,主要介绍单元测试,unittest模块特性、大致流程、源码及实战例子。

以下主要介绍接口概念、接口用例设计及登录接口测试实战。

01

什么是接口?

接口:检测外部系统与系统之间以及内部各个子系统之间的交互点。

通俗来说,接口就是连接前后端的桥梁,接口测试可以简单理解为脱离了前端的功能测试。一个又一个的接口就对应功能测试内一个又一个的功能。但注意,一个功能有可能不是一个接口就能实现。

那么,接口测试和功能测试的区别在哪呢?其实功能测试就是在页面上输入我们的参数值,点点点;而接口测试没有前端,而是通过接口文档上的调用地址、请求参数等,校验返回的结果值,也就是说,接口可以看成没有界面的功能测试。

因此,可以分析,系统间的接口包含三部分:输入处理逻辑输出

02

如何开展接口测试?

接口测试流程如下:

1.需求评审,熟悉业务和需求;

2.开发提供API接口文档;

3.根据开发交付的接口文档,编写接口测试用例;

4.接口测试用例评审;

5.开始执行接口测试;

6.提交测试报告;

03

如何设计接口用例?

▌1.获取接口文档

一般公司的开发会提供接口文档,没有接口文档的自行抓包吧(摸摸头),不知道怎么抓包的小伙伴,可以看看公众号的Fiddler系列文章。

接口文档是我们测试时最重要的一个依据,一个规范的接口文档至少包括

1.接口说明;

2.调用URL;

3.请求方法(get、post等);

4.请求参数、参数类型、请求参数说明等;

5.返回参数说明;

如下为一个简单的登录接口文档:

2.分析接口文档的接口,提取测试点

接口测试用例跟常规的功能测试用例基本一样,可以从接口功能测试、接口业务测试、接口性能测试、接口安全测试等角度考虑。

接口的逻辑校验,可以参照接口流程图来进行设计,一个分支需要作为一个场景去进行测试,需要覆盖到流程图里面所有的逻辑分支。

接口的参数校验,可以参照接口文档中的参数定义去进行验证,需要覆盖到所有参数对应的枚举值以及错误码等信息。

3.接口测试用例设计思路

接口功能的关注点是:

1.接口参数正确与否:接口传入的参数是否有正确填写;

2.接口参数缺失:接口参数有必填、选填参数,传参时,测试参数缺失对结果的影响;

3.接口参数边界值:比如用户名、密码有长度限制,需要测试不同长度的参数对结果的影响;

4.接口参数类型:比如接口文档中用户名为String类型,测试传入其他数据类型对结果的影响。

4.接口测试其他范围

  • 接口业务测试

主要是从业务的角度出发,把接口组合成一条业务链,比如登录之后充值,在数据库中金额是否正确等等

  • 接口的性能测试

是指接口是否满足业务的要求,比如业务要求系统可以满足50个人同时下单,那么下单这个接口就要可以承担50 TPS,目前业内一般使用JMETER去做接口性能测试,jmeter接口性能后续会单独在Jmeter系列文章里介绍。

  • 接口安全测试

接口的安全性主要围绕TokenTimestampSign三个机制展开设计,保证接口的数据不会被篡改和重复调用。

注意:本文主要涉及接口功能测试,相信做过功能测试的童鞋,设计接口测试用例也是没问题的。

04

接口测试用例实战

以下,我们以登录接口进行实战。

随着代码模块越来越多,混在一起,杂乱无章,这时我们考虑架构分层了,上篇文章:Python接口自动化之requests请求封装,封装的requests请求类,每个用例都要调用,可以放在公共模块里。

① 在项目下新建一个文件夹common,放入请求模块requests_handler.py

requests_handler.py

import requests
class RequestsHandler:def __init__(self):"""session管理器"""self.session = requests.session()def visit(self, method, url, params = None, data= None, json= None, headers= None):result = self.session.request(method,url,params=params,data=data,json=json,headers=headers)try:# 返回json结果return result.json()except Exception:return 'not json'def close_session(self):self.session.close()

②编写登录接口用例,调用封装的请求类。

登录用例,新建一个test_cases文件夹,用来存放用例模块。

test_Login.py

import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):def setUp(self):# 请求类实例化self.req = RequestsHandler()def tearDown(self):self.req.close_session()def test_login_success(self):login_url = 'http://127.0.0.1:8000/user/login'payload = {"mobile_phone": "1530272****","pwd": "12345678"}res = self.req.visit('post',login_url,json=payload)self.assertEqual(0, res['code'])
if __name__ == '__main__':unittest.main()

运行结果为:

Ran 1 test in 0.213s
OK

对于用例的一些总结:

①setUp, tearDown。前置条件,后置条件,setUp实例化,在运行测试用例前获取session管理器, tearDown,在测试用例执行结束后关闭session管理器。

②对于断言,小伙伴们可能不知道到底用返回结果中的哪个字段断言。个人意见,如果code、msg比较详细的话,可以利用code、msg其中一个来断言,当然code、msg一起做断言也可以,甚至你觉得返回结果中某个数据符合你的预期,也是可以拿来断言,断言手段是灵活多变的,自行选择最优方案。

小伙伴们看到总结,退出微信,打开王者荣耀,一气呵成,其实还没完呢,我们写了正向用例,还有异常用例也写两条,更多的异常用例可以自行扩展下。

import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):def setUp(self):# 请求类实例化self.req = RequestsHandler()def tearDown(self):# 关闭sessionself.req.close_session()def test_login_success(self):"""正确手机号,正确密码"""login_url = 'http://127.0.0.1:8000/user/login'payload = {"mobile_phone": "1530272****","pwd": "12345678"}res = self.req.visit('post',login_url,json=payload)# 根据请求结果中的code进行断言self.assertEqual(0, res['code'])def test_phone_is_null(self):"""手机号为空,密码正确"""login_url = 'http://127.0.0.1:8000/user/login'payload = {"mobile_phone": "","pwd": "12345678"}res = self.req.visit('post', login_url, json=payload)# 根据返回结果中的msg进行断言self.assertEqual("手机号码为空", res['msg'])def test_pwd_is_null(self):"""正确用户名,密码为空"""login_url = 'http://127.0.0.1:8000/user/login'payload = {"mobile_phone": "1530272****","pwd": ""}res = self.req.visit('post', login_url, json=payload)# 根据返回结果中的msg进行断言self.assertEqual("密码为空", res['msg'])
if __name__ == '__main__':unittest.main()

测试结果为:

Ran 3 tests in 0.259s
OK

以上代码如下痛点:

① 用例和数据未分离,维护成本大。可以数据与测试脚本分离,使用Excel存放测试用例,方便维护。

② 仔细研究发现正向用例、异常用例,只是传入的数据不一样,其他都是通用,这种情况下,我们可以引入ddt数据驱动,减少代码量。

总结:以上主要介绍了接口概念、接口用例设计及登录接口用例实战。

下一篇:Excel存放用例及封装类读取Excel数据。

以上

That‘s all

更多系列文章

敬请期待

ITester软件测试小栈

往期内容宠幸

1.Python接口自动化-接口基础(一)


2.Python接口自动化-接口基础(二)


3.Python接口自动化-requests模块之get请求


4.Python接口自动化-requests模块之post请求


5.Python接口自动化之cookie、session应用


6.Python接口自动化之Token详解及应用


7.Python接口自动化之requests请求封装


8.Fiddler设置断点(一)


9.Fiddler抓包详解


10.Fiddler跨域调试及Django跨域处理

快来星标 置顶 关注我

<<  滑动查看下一张图片  >>

今日问题:

在接口自动化测试项目中,你是如何设计测试用例的?

(欢迎在下方留言区发表你的看法)

后台 回复"资源"取干货

回复"21天打卡"一起打怪升级

测试交流Q群:727998947

点亮一下在看,你更好看

Python接口自动化之登录接口测试相关推荐

  1. Python接口自动化之yaml配置文件

    VOL 119 04 2020-05 今天距2021年241天 这是ITester软件测试小栈第119次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  2. Python接口自动化之数据驱动

    VOL 118 01 2020-05 今天距2021年244天 这是ITester软件测试小栈第118次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  3. python接口自动化4-绕过验证码登录(cookie)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

  4. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  5. Python接口自动化之logging封装及实战

    VOL 124 15 2020-05 今天距2021年230天 这是ITester软件测试小栈第124次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  6. Python接口自动化之unittest单元测试

    ------·今天距2021年251天·------ 这是ITester软件测试小栈第115次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之requests请求封装,主要通 ...

  7. 如何在项目中搭建python接口自动化框架?

    文章目录 前言 一.框架目录介绍 1.common模块 读取Excel代码 读取yaml代码(支持场景关联) jsonpath断言封装代码 requests二次封装(get.post) configp ...

  8. python接口自动化实战(框架)_python接口自动化框架实战

    python接口测试的原理,就不解释了,百度一大堆. 先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全. 各个文件夹下的文件如下: 一.理清思路 我这个自动化框架要实现什么 1.从excel里面提 ...

  9. python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

最新文章

  1. java final bigd_【BigData】Java基础_常量
  2. 【安全漏洞】浅谈Bypass Waf (基础-实战)
  3. 多线程总结之旅(12):跨线程调用控件的几种方式
  4. SQL总结(一)基本查询
  5. JavaFX UI控件教程(十五)之Combo Box
  6. 物联网智慧城市为降低城市能源消耗做出贡献
  7. Prime Distance On Tree-树分治+FFT
  8. 6 MM配置-企业结构-分配-给公司代码分配采购组织
  9. 台式电脑一直跳一个计算机页面出来,我的电脑界面上莫名其妙的多出了好几个IE浏览器拜托各位了 3Q...
  10. 关于用C#编写ActiveX控件2(转)
  11. 数组字符串转int数组_7.5 C++字符串数组 | 字符串数组输出
  12. LaTeX函数、符号及特殊字符
  13. 腾讯QQ2019最新版 v9.1.0(24712) 免安装绿色版 显IP去广告完整版
  14. 旅行商问题(回溯算法)
  15. 台风怎么看内存颗粒_C9BKV颗粒,英睿达铂胜Max RGB 4000超频测试
  16. linux鼠标晃动出现,鼠标指针抖动的原因及其解决方法【详解】
  17. MiL.k x Bithumb x Yanolja宣布建立三方商务及市场营销合作关系
  18. md5加密原理!!!【转】
  19. ews java 新建邮箱_通过EWS发送电子邮件时使用自定义显示名称
  20. cannot find -lxxx

热门文章

  1. 杭电1861 游船出租
  2. 计算机应用基础试题号2007,2006-2007计算机应用基础期末试题(A卷).pdf
  3. red hat linux基本命令行,Red Hat Enterprise Linux4 一些常用命令总结
  4. 九度搜索引擎点击优化_深圳坂田企业老总在想竞价推广和网站优化选哪个?
  5. Python随机梯度下降法(三)
  6. Python技术、爬虫、数据分析问题汇总【自用】
  7. JPA @Lob 存储大文本 org.postgresql.util.PSQLException: 大型对象无法被使用在自动确认事物交易模式。问题...
  8. mysql用户及数据库的创建及权限的更改
  9. 曾鸣:为什么要让「听得见炮火的士兵」做决定?| 干货
  10. TCP/IP(五)传输层之细说TCP的三次握手和四次挥手