自动化测试体系方案
方案1全编写代码流程
UI自动化:
使用python或java,配合selenium库及pytest框架做UI自动化测试。(通过selenium的webdriver驱动,驱使浏览器)
1. WebDriver API(基于Java、Python)
java:下载下来的selenium的Jar包,比如selenium-java-3.8.1.zip包,代表Selenium3.8.1的版本
python:使用pip安装selenium库,可以指定安装版本,一般一最新的为主
2. 浏览器的驱动(browser driver)
每个浏览器都有自己的驱动,均以exe文件形式存在
比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe
3. 浏览器
在WebDriver脚本运行的时候:
对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动,浏览器驱动中包含了一个HTTP Server,用来接收这些http请求,HTTP Server接收到请求后根据请求来具体操控对应的浏览器,浏览器执行具体的测试步骤,浏览器将步骤执行结果返回给HTTP Server
HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。
4、实现方式(元素定位及操作函数):
1、定位元素:将页面元素全部存储到配置文件(.ini、.yaml、等文件中),元素获取的方式有以下八种:
- find_element_by_id()通过ID定位
- find_element_by_name()通过name定位
- find_element_by_class_name()通过class_name定位
- find_element_by_tag_name()通过tag定位
- find_element_by_link_text()通过link_text定位
- find_element_by_partial_link_text()通过partial_lisk_text定位
- find_element_by_xpath()#通过xpath定位
- find_element_by_css_selector()通过css_selector定位
2、操作方式:通过selenium的函数和方法调用元素来控制网页端的模拟操作(click(点击)、 senk_keys(输入)、get_attribute(获取)等调用操作元素的函数方法)。
3、UI自动化PO模式:
核心思想是通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化, 只需要调整页面元素封装的代码,提高测试用例的可维护性、可读性。
PO模式可以把一个页面分为三层,对象库层、操作层、业务层。
对象库层:封装定位元素的方法。操作层:封装对元素的操作。
业务层:将一个或多个操作组合起来完成一个业务功能。比如登录:需要输入帐号、密码、点击登录三个操作。
4、PO模式的好处:
- 减少冗余代码
- 业务代码和测试代码被分开,降低耦合性维护成本低
- 减少业务流程不清晰的后期维护成本
二、接口自动化
使用python配合requests+pytest框架做http接口自动化测试(通过使用requests库模拟http客户端给服务端发送请求)
- requests 库使用:
Requests中的 get() 方法能向服务器发送了一个请求,请求类型为 HTTP 协议的 GET 方式;post() 方法,也能向服务器发送一个请求,请求类型是 HTTP 协议的 POST 方式,您大可根据访问的网页而定。
- requests实现方式:
- 利用requests中的session类来实现客户端和服务端的会话保持
①get请求:requests.get('url')
②post请求:requests.post("url/post")
③put请求:requests.put("url/put")
④delete请求:requests.delete("url/delete")
⑤head请求:requests.head("url/get")
⑥options请求:requests.options("url/get")
- 校验方法:
通过.json()函数获取服务端返回的数据结果进行校验,使用返回结果key和value或者http状 态码等来断言数据是否正确
- 自动化测试项目管理及PO模式:
- 可以通过yaml、ini、excel等来管理测试用例及接口参数模型
- 接口自动化PO模式:
新建一个工程(一定要创建工程),工程名称自己定义,如:ApiAutoTest
- 在工程下创建以下几个 pakage 包:
- --testcase:这个包放 test 开头的测试用例
- --common:这个包放一些公共的方法,如:读取 excel 文件方法,读取 mysql 等
- Read_data.py:封装 Excel、yaml、ini 读取方法
- Excel_info.py:读取 Excel 、yaml、ini中内容
- request_base.py:封装请求公共方法
- --config:这个包下面放配置文件
- conf.py:存放路径 url
- --run_all:这个包下放入执行用例的文件
- --report:这里存放测试报告
- --data:这里放接口测试用例
三、测试框架pytest:
- 简单灵活,容易上手,文档丰富;
- 支持参数化,可以细粒度地控制要测试的测试用例;
- 能够支持简单的单元测试和复杂的功能测试,还可以用selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
- 具有很多第三方插件,并且可以自定义扩展,比如pytest-selenium,pytest-html等
- 测试用例的skip和xfail处理
- 可以很好的和CLI工具结合,例如Jenkins
- pytest支持测试结果输出报告以web形式显示(allure报告)
四、测试报告allure(特点):
可以将测试失败划分为 bug 和损坏的(Broken)测试,还可以配置日志、步骤、固定装置、附件、时间、历史记录,以及与 TMS 的集成和 Bug 跟踪系统,方便将 Task 与负责 Task 开发人员和测试人员绑定,从而使开发和测试人员第一时间掌握所有信息。
从管理者的角度看,Allure 提供了一个清晰的“全局”视野。
包括本次测试涵盖了哪些功能,Bug 在哪个 case 用例中被发现,以及整体测试用例、单条测试用例的执行时间等信息。
Allure 测试报告除了涵盖测试运行的全面信息外,还提供各种维度的分析图,包括如下几个部分。
项目总览(OverView)
项目总览显示了总体测试运行的一系列统计信息。
按缺陷种类分析(Categories)
缺陷种类分析显示了所有不同原因引起的失败,并分类展示。
按测试套件分析(Suites)
测试套件分析显示了按照套件和类划分的所有的测试执行情况。
图表模块(Graphs)
图表模块,包括按照不同维度分析的各种图表(例如测试状态表分析,测试用例等级分析表,测试执行时间分析表等等)。
按执行时间分析(Timeline)
按执行时间分析模块,详细列出了各个测试用例的执行时间,你可以筛选出那些运行时间最长的测试用例进行优化。
针对 BDD 驱动的测试用例进行分析(Behaviors)
这里主要是根据 Epic、Feature 和 Story 标签对测试结果进行分组。
按照 Package 进行分析(Packages)
Package 模块列出了按照 Package 维度进行分析的详细图表。
方案2工具测试流程
- Jmeter接口测试工具介绍:
JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
二、Jmeter接口测试工具实现(JMeter常用组件):
1、CSV数据文件设置:添加csv格式保存的测试用例
2、线程组:可以认为是测试开启的入口,如果main函数。
3、HTTP请求:模拟发起一次http请求
4、如果(If)控制器:主要用以决定请求方式
5、响应断言:判断返回是否符合预期
6、查看结果树:请看HTTP请求和返回信息
7、汇总报告:查看成功率,以及响应时间等信息
三、Jmeter接口测试工具(用例管理及案例):
1、测试用例管理:
一般使用EXCEL来管理测试用例,包含主题、请求方式、接口路径、参数、http状态码、数据变量等
2、测试案例:
通过线程组,控制整个线程组内的操作及数据,如:新增http请求、设置响应断言、增加结果图、导入excel文档
持续集成jenkins
以上两种方案均需要使用jenkins持续集成工具:
1、执行集成构建:
持续,自动地构建&测试软件项目代码管理(git/svn)>编译(maven/ant/gradle)>打包>测试环境部署>自动化测试
2、研发体系中的迭代流程:
- 源码分支管理: git或者svn, 将不同开发编写的代码集成起来形成不同版本和分支,那么急于版本管理,来进行版本打包发布
- 形成版本 编译打包: maven,ant,gradle集成的版本代码编译打包形成可发布的war包或可运行的安装程序,提供给测试实验
- 测试环境部署: 把形成软件产品包部署到响应的服务器环境上,测试可以开始进行功能测试,CI可以开始执行自动化测试
- (如果不做自动化第三部就已经可以结束了)
- 自动化测试:在测试环境完成部署之后,充当冒烟测试职责,对产品核心功能用例进行测试,相当于进行一次准入验证,通过了才移交测试组展开功能测试。
3、jenkins的工作原理:
Jenkins是先将源代码从gitlab中拷贝一份到本地,然后根据设置的脚本进行build。我们可以看出,整个系统的关键就是那个build脚本,用来告诉jenkins在一次集成中需要执行的任务。