一、什么项目适合做自动化测试?
软件需求变动不频繁
测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。
项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。
项目周期较长
由于自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成。这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。
自动化测试脚本可重复使用
自动化测试脚本的重复使用要从三个方面来考量,一方面所测试的项目之间是否很大的差异性(如C/S系统和B/S系统的差异);所选择的测试工具是否适应这种差异;最后,测试人员是否有能力开发出适应这种差异的自动化测试框架。
二、web 接口测试分类与测试要点
web 接口测试分类:
服务器接口测试,是测试浏览器与服务器的接口
外部接口测试,典型例子是第三方登录
web接口测试测试要点:
1、请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等
2、检查返回数据的正确性与格式;json是一种非常常见的格式
3、接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证
4、接口的性能,web接口同样注重性能,这影响用户的使用体验
三、基于python 自带的单元测试框架unittest 编写的接口测试框架特点:
a . 支持简单易用的表格型语法,使得可以用统一方式创建测试用例(.yml / .json 文件)
b . 提供HTML的简单易读的report 和日志结果文件
c . 平台和应用相互独立(平台:测试框架本身;应用:被测程序)
d . 提供XML格式的输出文件,非常容易进行持续集成
e . 支持创建数据驱动的测试用例
f . 支持代码驱动(比如有关联的接口)
g . 提供test case和test suite级别的setup和teardown
注:
数据驱动:因为数据的改变导致结果的改变(参数化)
数据的改变(更新)驱动自动化的执行,从而引起结果改变
四、基于python 自带的单元测试框架unittest 编写的接口测试架构
分为三层,分别是用例层、控制层、引擎层(驱动层)
用例层:用例层支持 yml文件 json文件 用它来写用例的好处是灵活,字段不需要像excel里面那样
控制层:控制层用来发邮件与 产生报告
引擎层(驱动层):用python 自带的requests 模块调用接口,封装了各种方法,支持加cookie header 等的各种入参类型
五、完整的测试流程
A . 编写测试用例
直接使用Python自带的单元测试框架unittest来编写自动化测试用例,利用其组织测试用例,断言预期结果,以及批量执行测试用例等功能,可以很好的进行Web自动化测试的开发
代码参考个人git 仓库:https://coding.net/u/chendai21/p/llq-code/git
B. 执行测用例, 执行完毕后自动生成测试报告,发送邮件
整个代码执行过程可以分成二个步骤:
1.通过unittest框架的discover()找到匹配的测试用例(以test_开头的脚本),由BeautifulReport 的BeautifulReport 方法执行测试用例并生成最新的测试报告。
前置条件:把BeautifulReport文件解压后拷贝到External Libraries—>site-packages里面,主要用于生成HTML测试报告,以便生成一份通俗易懂的测试报告来展示自动化测试成果。
2.先封装sendmail类再定义send_report()函数(发送指定路径下某文件的邮件),将得到的最新测试报告的完整路径传给sendmail,实现发邮件功能。
代码如下:
import sys,os
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,BASE_PATH)
from common.tools import GetCase
from conf.setting import PY_PATH,REPORT_PATH
import unittest,BeautifulReport
def send_report(all_count, pass_count, report_file=None):title = time.strftime('%Y-%m%d %H%M%S') + '接口测试报告'content = '''Dear all:本次接口测试共运行{all}条测试用例,通过{ok}条,失败{fail}条。测试报告详细见附件。'''.format(all=all_count, ok=pass_count, fail=(all_count - pass_count))# 发送测试报告m = SendMail(MAIL_USER_INFO, MAIL_PASSWD, RECV, title, content, file=report_file)m.send_mail()def run():g = GetCase()g.creat_py() #生成测试文件suite = unittest.TestSuite() #创建测试套装all_cases = unittest.defaultTestLoader.discover(PY_PATH,'Test*.py') #读取测试用例[suite.addTests(case) for case in all_cases]report_html = BeautifulReport.BeautifulReport(suite)report_filename = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))# 生成报告的文件名格式20180329190544_TestReport.htmlreport_html.report(filename=report_filename, description='用例描述', log_path=REPORT_PATH)send_report((report_html.failure_count + report_html.success_count), report_html.success_count,os.path.join(REPORT_PATH, report_filename))
# BeautifulReport 生成的报告 用点就能看到它的属性了(success_count、failure_count)
# 实际上BeautifulReport是一个类 然后实例化后有对应的实例变量run()
生成的测试报告如下图:
收到的邮件如下图:
【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战