一.测试工具
1.1抓包工具
1.1.1Charles
Charles功能:
- 截取 Http 和 Https 网络封包。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 支持模拟慢速网络。
- 可进行压力测试
Charles使用教程
PC端抓包:
Charles 会自动配置浏览器和工具的代理设置,所以说打开工具直接就已经是抓包状态了。只需要保证一下几点即可:
确保 Charles 处于 Start Recording 状态。
勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
移动端抓包:
手机抓包的原理和 PC 类似,手机通过把网络委托给 Charles 进行代理与服务端进行对话。具体步骤:
1.使手机和电脑在一个局域网内,不一定非要是一个 IP 段,只要是在同一个路由器下即可。
2.电脑端配置:
关掉电脑端的防火墙(这点很重要)。
打开 Charles 的代理功能:通过主菜单打开 Proxy | Proxy Settings 弹窗,填入代理端口(端口默认为 8888,不用修改),勾选 Enable transparent HTTP proxying。
如果不需要抓取电脑上的请求,可以取消勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
3.手机端配置:
通过 Charles 的主菜单 Help | Local IP Address 或者通过命令行工具输入 ipconfig 查看本机的 IP 地址。
设置代理:打开手机端的 WIFI 代理设置,输入电脑 IP 和 Charles 的代理端口。
4.设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击 Allow 即可完成设置。
1.1.2Fiddler
Fiddler简介:
Fiddler是Web调试工具之一,是一个 HTTP
协议调试代理工具,由C#
写出来的,它能记录所有客户端和服务器的http和https请求。允许你监视、设置断点、甚至修改输入输出数据。Fiddler包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展。Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。
Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。 当Fiddler退出的时候它会自动注销, 这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。 解决的办法是重新启动下Fiddler。
Fiddler 的原理是以 Web 代理服务器的形式进行工作的,代理(Proxy)就是在客户端和服务器之间设置一道关卡,对 Web 客户端来说,Fiddler(代理)扮演的是服务器的角色,接受请求报文,返回相应报文;对于 Web 服务器来说,代理扮演的是客户端的角色,发送 Web 请求报文,接受 Web 相应报文。
1.1.3Charles和Fiddler的区别
Fiddler和Charles的功能大同小异,基本上都是抓包、断点调试、请求替换、构造请求、代理功能;
主要区别:
charles可以实时过滤请求,fiddler添加过滤器后再发送请求才能起作用
charles可以树状或者列表查看各个请求,fiddler只能列表查看
charles可以对某个请求进行断点操作,而fiddler是对所有的请求进行断点
charles模拟弱网是限制带宽,并且可选择只对某个app进行限速;而fiddler是延长时间,并且是对整个手机进行限制;Charles是基于Java实现的,基本上可以运行在所有主流的桌面系统,Fiddler只能运行在Windows平台。
Charles是一款收费的抓包工具,但是支持破解,Fiddler是一款开源免费抓包工具。
1.2接口测试工具
1.2.1Postman
简介:Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。 它主要是用来模拟各种HTTP请求的(如:get/post/delete/put…等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。
1.2.2Jmeter
简介:JMeter是一个开源的Java应用程序,可用于性能测试、压力测试、接口测试等。JMeter的基本原理是模拟多用户并发访问应用程序,通过发送HTTP请求或其他协议请求,并测量响应时间、吞吐量、并发用户数、错误率和性能指标等,以评估应用程序的性能和稳定性。
特性:支持多种协议(HTTP、HTTPS、FTP、TCP),支持多种测试类型(负载测试、压力测试、功能测试、基准测试和分布式测试),支持多种测试场景(包括并发用户数、持续时间、循环次数和延迟时间等,可以模拟真实的使用场景),支持多种测试结果收集和显示方式(聚合报告、图形结果、树形结果和控制台输出等),支持插件和扩展。
1.2.3postman和jmeter的区别
开发语言区别:
Postman是基于js语言编写的接口测试工具。
Jmeter是基于Java语言编写的纯UI接口+性能测试工具。
使用范围区别:
Postman仅能做接口测试,Jmeter除了接口测试外,还能做性能测试。
使用区别:
Postman在录入接口信息时,URL是一个整体,而Jmeter拆分成了四个部分(协议名称、IP地址、路径、端口号)
Postman可以直接在请求中添加请求的头部信息,Jmeter需要添加信息头管理器(Http信息头管理器)
Postman虽然也可以通过csv文件加载测试用例,但是每次启动需要手动加载测试数据,不能完全实现自动化,Jmeter加载csv文件的测试数据时,不需要手动去加载,能够实现接口自动化。
Postman断言需要编写js脚本,没有封装好的断言方式,Jmeter封装了多种断言方式,一般情况下不需要用户通过编写BeanShell脚本去实现断言。
Postman没有逻辑控制器,Jmeter有逻辑控制器,应用更灵活。
Postman链接数据库需要下载安装第三方插件xmysql,Jmeter自带链接数据库的插件。并且在对数据的处理上,Jmeter更易理解,更便于操作.
1.2.4Apifox
为了能让各个产品项目负责人落地更加便捷,Apifox应运而生实现了API设计开发测试一体化协作。俗称:Apifox=Postman+Swagger+Jmeter+Mock工具集。简而言之:开发人员在Apifox里定接口、前端直接根据Apifox去Mock数据、后端开发直接在Apifox进行调试、测试人员直接在Apifox的接口文档里面写用例、接下来就是前后端进行联调。
1.2.5Apipost
ApiPost产生的初衷是为了提高研发团队各个角色的效率!产品的使用受众为由前端开发、后端开发和测试人员以及技术经理组成的整个研发技术团队。
Apipost支持基本API调试功能,同时可自定义接口、快速克隆接口、逻辑化管理接口。具备postman不具备的快速生成文档功能,支持swagger不支持的websocket协议。支持团队协同,多人同时在线编辑。
1.3用例编写工具
xmind
1.4缺陷Bug管理工具
1.5接口管理工具
yapi
二.测试框架
2.1自动化测试框架概括
接口自动化:Pytest、Robotframework、Httprunner、TestNG(Java 自动化测试框,也可用于单元自动化)、REST-Assured(Java 自动化测试框架)
ui自动化:Selenium、Appium
单元自动化:TestNG、JUnit、Unittest
2.2接口自动化
2.2.1Pytest
特点:
1、简单灵活,非常方便的组织自动化测试用例;
2、支持参数化,可以细粒度地控制要测试的测试用例;
3、能够支持简单的单元测试和复杂的功能测试,比如web端selenium/移动端appnium等自动化测试、request接口自动化测试
4、pytest具有很多第三方插件,并且可以自定义扩展,比如测试报告生成,失败重运行机制
5、测试用例的skip和fail处理;
6、结合业界最美的测试报告allure+Jenkins,持续集成
2.2.2Robotframework:
Robot Framework是一款python编写的功能自动化测试框架。⽀持关键字驱动且可扩展性好,可以同时测试多种类型的客户端,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。
Robot Framework 框架除了自身提供了非常多的基础库功能,也支持第三方扩展库,同时提供了非常多的内建工具、扩展接口,方便框架与其他系统进行对接。这些一起构建了一套全面且易扩展的Robot Framework框架生态系统。
2.2.3Httprunner:
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,继承request的全部特性,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。(pyhton)
2.2.4TestNG:
TestNG是一个java中的开源自动化测试框架,其灵感来自JUnit和NUnit,TestNG还涵盖了JUnit4整个核心的功能,但引入了一些新的功能,使其功能更强大,使用更方便。
优势:支持依赖测试方法,并行测试,负载测试,局部故障,灵活的插件API,支持多线程测试。
2.2.5REST-Assured:
Rest-Assured 是一套由 Java 实现的轻量级的 REST API 测试框架,可以直接编写代码向服务器端发起 HTTP 请求,并验证返回结果。
优点:
1.简约的接口测试 DSL(Domain Specific Language,即领域特定语言。DSL 是高效简洁的领域语言,与通用语言相比能极大降级理解和使用难度,同时极大提高开发效率的语言),因此代码足够简洁,编写测试用例快。
2.顺序控制结构(最简单的结构莫过于此,执行这条语句然后执行下一条语句的形式)。
3.符合契约编程思想(如果前置条件满足的情况下调用函数,那么函数的执行将确立后置条件)。
4.支持 XML、JSON 的结构化解析。
5.支持 Xpath、Jsonpath、Gpath 等多种解析方式。
6.对 Spring 的支持较为全面。
2.3UI自动化
2.3.1Selenium:
Selenium是一个强大的自动化测试工具,它允许开发者编写脚本来模拟用户在Web浏览器中的操作。在Python中,Selenium库是自动化Web测试的首选工具之一
2.3.2Appium:
1.Appium是开源的、跨平台的测试自动化测试框架;
2.主要用于测试移动端应用;
3.Appium支持模拟器和真机上的原生应用、混合应用、Web应用;
4.Appium使用WebDriver的JSON wire协议来驱动Apple系统的UI Automator库、Android系统的UI 5.Automator框架;
6.因Appium集成了Selendroid框架,所以Appium支持比较老版本的Android;
7.Appium支持Selenium WebDriver支持的所有语言(Java、Python、JavaScript、Objective-C、8.PHP、Ruby、C#、Clojure、Perl等)。
2.4单元测试自动化
2.4.1TestNG:见上
2.4.2JUnit:
JUnit是用于编写可复用测试集的简单框架,是xUnit的一个子集( xUnit是一套基于测试驱动开发的测试框架,有PythonUnit、CppUnit、JUnit等)。JUnit测试是白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(what)的功能。Java的开发环境都已经集成了JUnit作为单元测试的工具,比如IDEA,Eclipse等等 。
2.4.3Unittest:
Unittest是Python自带的单元测试框架,不仅适用于单元测试,还可用于Web、Appium、接口自动化测试用例的开发与执行。该测试框架可组织执行测试用例,并且提供丰富的断言方法,判断测试用例是否通过,并最终生成测试结果。
Unittest 核心要素:
TestCase:即测试用例,Unittest提供testCase类来编写测试用例,一个TestCase的实例就是一个测试用例。一条测试用例就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown),通过运行一条测试用例,可以对某一个问题进行验证。
Fixture:即测试固件,用于测试用例环境的搭建和销毁。在测试步骤执行前需要为该测试用例准备环境(SetUp),如启动app或打开浏览器,测试步骤执行后需要恢复环境 (TearDown),如关闭app或浏览器,这时候就需要用到Fixture,使代码更简洁。
TestSuite:即测试套件,把需要执行的测试用例集合在一起就是TestSuite。使用TestLoader来加载TestCase到TestSuite中。
TextTestRunner:即测试执行器,用于执行测试用例。该模块中提供run方法执行TestSuite中的测试用例,并返回测试用例的执行结果,如运行的用例总数、用例通过数、用例失败数。
report:即测试报告。unittest框架没有自带的用于生成测试报告的模块或接口,需要使用第三方的扩展模块HTMLTestRunner。