建设机械网站机构,辽宁建设工程信息网直接发包工程,什么是门户,建网站需要什么手续目录 
1. 什么是接口测试2. 基本流程3. 需求分析4. 用例设计5. 脚本开发6. 结果分析7. 完整脚本8. 参考资料1. 什么是接口测试 
顾名思义#xff0c;接口测试是对系统或组件之间的接口进行测试#xff0c;主要是校验数据的交换#xff0c;传递和控制管理过程#xff0c;以及…目录 
1. 什么是接口测试2. 基本流程3. 需求分析4. 用例设计5. 脚本开发6. 结果分析7. 完整脚本8. 参考资料1. 什么是接口测试 
顾名思义接口测试是对系统或组件之间的接口进行测试主要是校验数据的交换传递和控制管理过程以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型测试类型又主要分为功能测试性能测试稳定性测试安全性测试等。 
在分层测试的“金字塔”模型中接口测试属于第二层服务集成测试范畴。相比UI层主要是WEB或APP自动化测试而言接口自动化测试收益更大且容易实现维护成本低有着更高的投入产出比是每个公司开展自动化测试的首选。 
下面我们以一个HTTP接口为例完整的介绍接口自动化测试流程从需求分析到用例设计从脚本编写、测试执行到结果分析并提供完整的用例设计及测试脚本。 2. 基本流程 
基本的接口功能自动化测试流程如下 
需求分析 - 用例设计 - 脚本开发 - 测试执行 - 结果分析 
2.1 示例接口 
接口名称豆瓣电影搜索 
接口文档地址https://developers.douban.com/wiki/?titlemovie_v2#search 
接口调用示例 
1) 按演职人员搜索https://api.douban.com/v2/movie/search?q张艺谋 
2) 按片名搜索https://api.douban.com/v2/movie/search?q大话西游 
3) 按类型搜索https://api.douban.com/v2/movie/search?tag喜剧 3. 需求分析 
需求分析是参考需求、设计等文档在了解需求的基础上还需清楚内部的实现逻辑并且可以在这一阶段提出需求、设计存在的不合理或遗漏之处。 
如豆瓣电影搜索接口我理解的需求即是支持对片名演职人员及标签的搜索并分页返回搜索结果。 
4. 用例设计 
用例设计是在理解接口测试需求的基础上使用MindManager或XMind等思维导图软件编写测试用例设计主要内容包括参数校验功能校验、业务场景校验、安全性及性能校验等常用的用例设计方法有等价类划分法边界值分析法场景分析法因果图正交表等。 
针对豆瓣电影搜索接口功能测试部分我们主要从参数校验功能校验业务场景校验三方面设计测试用例如下 5. 脚本开发 
依据上面编写的测试用例设计我们使用pythonnosetests框架编写了相关自动化测试脚本。可以完整实现接口自动化测试、自动执行及邮件发送测试报告功能。 
5.1 相关lib安装 
必要的lib库如下使用pip命令安装即可 
pip install nose
pip install nose-html-reporting
pip install requests 
5.2 接口调用 
使用requests库我们可以很方便的编写上述接口调用方法如搜索q刘德华示例代码如下 
#codingutf-8
import requests
import jsonurl  https://api.douban.com/v2/movie/search
paramsdict(qu刘德华)
r  requests.get(url, paramsparams)
print Search Params:\n, json.dumps(params, ensure_asciiFalse)
print Search Response:\n, json.dumps(r.json(), ensure_asciiFalse, indent4) 
在实际编写自动化测试脚本时我们需要进行一些封装。如下代码中我们对豆瓣电影搜索接口进行了封装test_q方法只需使用nosetests提供的yield方法即可很方便的循环执行列表qs中每一个测试集 
class test_doubanSearch(object):staticmethoddef search(params, expectNumNone):url  https://api.douban.com/v2/movie/searchr  requests.get(url, paramsparams)print Search Params:\n, json.dumps(params, ensure_asciiFalse)print Search Response:\n, json.dumps(r.json(), ensure_asciiFalse, indent4)def test_q(self):# 校验搜索条件 qqs  [u白夜追凶, u大话西游, u周星驰, u张艺谋, u周星驰,吴孟达, u张艺谋,巩俐, u周星驰,大话西游, u白夜追凶,潘粤明]for q in qs:params  dict(qq)f  partial(test_doubanSearch.search, params)f.description  json.dumps(params, ensure_asciiFalse).encode(utf-8)yield (f,) 
我们按照测试用例设计依次编写每个功能的自动化测试脚本即可。 
5.3 结果校验 
在手工测试接口的时候我们需要通过接口返回的结果判断本次测试是否通过自动化测试也是如此。 
对于本次的接口我们搜索“q刘德华”我们需要判断返回的结果中是否含有“演职人员刘德华或片名刘德华”搜索“tag喜剧”时需要判断返回的结果中电影类型是否为“喜剧”结果分页时需要校验返回的结果数是否正确等。完整结果校验代码如下 
class check_response():staticmethoddef check_result(response, params, expectNumNone):# 由于搜索结果存在模糊匹配的情况这里简单处理只校验第一个返回结果的正确性if expectNum is not None:# 期望结果数目不为None时只判断返回结果数目eq_(expectNum, len(response[subjects]), {0}!{1}.format(expectNum, len(response[subjects])))else:if not response[subjects]:# 结果为空直接返回失败assert Falseelse:# 结果不为空校验第一个结果subject  response[subjects][0]# 先校验搜索条件tagif params.get(tag):for word in params[tag].split(,):genres  subject[genres]ok_(word in genres, Check {0} failed!.format(word.encode(utf-8)))# 再校验搜索条件qelif params.get(q):# 依次判断片名导演或演员中是否含有搜索词任意一个含有则返回成功for word in params[q].split(,):title  [subject[title]]casts  [i[name] for i in subject[casts]]directors  [i[name] for i in subject[directors]]total  title  casts  directorsok_(any(word.lower() in i.lower() for i in total),Check {0} failed!.format(word.encode(utf-8)))staticmethoddef check_pageSize(response):# 判断分页结果数目是否正确count  response.get(count)start  response.get(start)total  response.get(total)diff  total - startif diff  count:expectPageSize  countelif count  diff  0:expectPageSize  diffelse:expectPageSize  0eq_(expectPageSize, len(response[subjects]), {0}!{1}.format(expectPageSize, len(response[subjects]))) 
5.4 执行测试 
对于上述测试脚本我们使用nosetests命令可以方便的运行自动化测试并可使用nose-html-reporting插件生成html格式测试报告。 
运行命令如下 
nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-reportTestReport.html 
5.5 发送邮件报告 
测试完成之后我们可以使用smtplib模块提供的方法发送html格式测试报告。基本流程是读取测试报告 - 添加邮件内容及附件 - 连接邮件服务器 - 发送邮件 - 退出示例代码如下 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartdef send_mail():# 读取测试报告内容with open(report_file, r) as f:content  f.read().decode(utf-8)msg  MIMEMultipart(mixed)# 添加邮件内容msg_html  MIMEText(content, html, utf-8)msg.attach(msg_html)# 添加附件msg_attachment  MIMEText(content, html, utf-8)msg_attachment[Content-Disposition]  attachment; filename{0}.format(report_file)msg.attach(msg_attachment)msg[Subject]  mail_subjetmsg[From]  mail_usermsg[To]  ;.join(mail_to)try:# 连接邮件服务器s  smtplib.SMTP(mail_host, 25)# 登陆s.login(mail_user, mail_pwd)# 发送邮件s.sendmail(mail_user, mail_to, msg.as_string())# 退出s.quit()except Exception as e:print Exceptioin , e 
6. 结果分析 
打开nosetests运行完成后生成的测试报告可以看出本次测试共执行了51条测试用例50条成功1条失败。 失败的用例可以看到传入的参数是{count: -10, tag: 喜剧}此时返回的结果数与我们的期望结果不一致count为负数时期望结果是接口报错或使用默认值20但实际返回的结果数目是189。赶紧去给豆瓣提bug啦- - 7. 完整脚本 
豆瓣电影搜索接口的完整自动化测试脚本我已上传到的GitHub。下载地址test_demo/test_douban at master · lovesoo/test_demo · GitHub 
下载完成之后使用如下命令即可进行完整的接口自动化测试并通过邮件发送最终的测试报告 
python test_doubanSearch.py最终发送测试报告邮件截图如下 8. 参考资料 
1) requests: Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档 
2) nosetests: Testing with nose — nose 1.3.7 documentation 
3) nose-html-reporting: nose-html-reporting · PyPI