1 测试工具
------------1.1 Selenium是什么,流行的版本有哪些?--------------------
selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,模拟用户操作。
通常情况下用于回归测试或者冒烟测试阶段,
网速、操作繁琐程度,页面加载速度,等待时间,运行脚本线程数
Selenium是一个Web UI自动化工具。它不提供任何API来建立数据库连接。这取决于你使用Selenium进行自动化的编程语言。
Selenium是基于Web的最流行的UI自动化测试工具。支持"三多",即多平台、多语言、多浏览器。它提供了一组支持多种平台的公开API(例如Linux,Windows,Mac OS X等)。此外,像Google Chrome,Mozilla Firefox,Internet Explorer和Safari等所有现代浏览器都可以用来运行Selenium测试。它也涵盖了Android平台,其中Appium是实现Selenium Webdriver界面的工具,用于移动自动化。
值得注意的是,除了许多后来的小型版本之外,Selenium还有三个主要版本:
Selenium 1.0或Selenium RC,于2004年初发布,提供了一个使用服务器与浏览器交换命令和响应的API集。
Selenium 2.0或Selenium Webdriver,在2011年中推出,并在Selenium功能中引入了一系列重大改进。这些新的API完全取代了服务器组件,并与目标浏览器本地交互。
Selenium 3.0,这个版本是在2016年末发布的大版本。它带来的主要变化是引入Webdriver API的W3C规范,用于浏览器自动化。也就是说,每个主要的浏览器都会有自己的Webdriver API来实现功能。
什么是Selenium Server,它与Selenium Hub有什么不同?
Selenium Server是使用单个服务器作为测试节点的一个独立的应用程序。Selenium hub代理一个或多个Selenium的节点实例。一个hub 和多个node被称为Selenium grid。运行SeleniumServer与在同一主机上用一个hub和单个节点创建de Selenium grid类似。
Selenium主要有三种验证点 -
检查页面标题
检查某些文字
检查某些元素(文本框,下拉菜单,表等)
常问点:(必背)
创建浏览器对象-》获取页面元素-》操作页面-》关闭页面
导入模块-》构建URL-》操作页面(操作页面本身,操作页内元素)-》关闭页面
打开浏览器,打开指定页面,查找元素,元素操作,断言,关闭浏览器
当有很多定位器时,如ID、名称、XPath、CSS定位器,我应该使用哪一个?
如果有唯一的名称或标识符可用,那么应该使用它们来代替XPath和CSS定位器。如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。
元素定位
ID定位:find element_by_id()
name定位:find_element_by_name()
class定位:find_element_by_class_name(),(元素选择器、类选择器、多类选择器、ID、属性选择器,元素名【属性名】)
CSS定位:find_element_by_css_selector()
tag定位:find_element_by_tag_name(),定义一类功能
link定位:find_element_by_link_text()
partial_link定位:find_element_by_partial_link_text(),超链接部分文本
xpath定位:find_element_by_xpath(),属性值变化或相同
--------------------------------------1.2 Appium---------------------------------
是开源的移动端自动化测试框架;
可以测试原生的、混合的、以及移动端的web项目;
可以测试ios,android应用(当然了,还有firefox os);
是跨平台的,可以用在osx,windows以及linux桌面系统上;
find by "class" (i.e., ui component type,andorid上可以是android.widget.TextView)
find by "xpath" (i.e., an abstract representation of a path to an element, with certain constraints,由于appium的xpath库不完备的原因,这个不太推荐)
find by "id"(android上是控件的resource id)
区别:Selenium是web端的自动化测试工具,Appium是移动端的自动化测试工具
联系:在Python的appium包中实际继承了Selenium,在测试过程中将移动端的页面元素当作是网页来处理,所以Selenium的定位方法也可以使用
----------------------------------1.3 JMeter-----------------------------
多线程框架-支持多并发操作
用于对服务器模拟负载
支持web、数据库、FTP服务器系统的性能测试
开源、纯JAVA、可二次定制化开发
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
常问点:(必背)
压力测试使用步骤
bin目录下jmeter.bat启动-》新建测试计划-》新建线程组-》设置线程组参数(线程数、启动时间、重复次数)-》新增http请求(协议、IP、端口、请求路径)-》新增监听器(压测结果)
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟20个用户,每个用户迭代100次,那么这里显示2000
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,请参考下文
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
---------------------------------1.4 接口测试步骤:------------------------------
常问点:(必背)
新建线程组-》添加http cookie管理器-》添加http请求默认值-》添加http请求的采样器-》设置请求路径、请求方法、参数列表-》设置检查点,响应断言-》添加监听器-》
(1)添加线程组 (2)添加http请求 (3)在http请求中写入接入url、路径、请求方式和参数 (4)添加查看结果树 (5)调用接口、查看返回值
-----------------------------------1.5 断言-----------------------------
用于判断一个表达式,在表达式条件为false时触发异常
import sys assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"
unittest常用断言异常
assertEqual,assertNotEqual,assertTrue,assertFalse,assertIs,assertIsNot,assertIsNone,assertIsNotNone,assertIn,
使用场景
防御性编程
运行时对程序逻辑的检测
合约性检查:前置条件,后置条件
程序中的常量
检查文档
断言:某行代码或者某行脚本 之前加上 断言,如果不出错,则程序继续往下执行。如果出错呢?那程序就会抛出异常提示,
告诉你,程序出错,并且终止此次执行。
-------------------------------------1.6 Unittest---------------------------
python单元测试框架类似JUnit
testcase:环境搭建setUp,执行测试代码run,测试后环境的还原teardown
test suite:测试用例集合
test runner:执行测试用例
testloader:加载testcase到testsuite中
test fixture:测试用例环境的搭建和销毁过程
单元测试步骤:继承testcase类,以test打头的测试方法,执行unittest.main(),
导入unittest模块->继承测试用例类->定义setUp和tearDown->定义测试用例方法->调用unittest.main()启动测试
------------------------1.7 REFUL API-----------------------------
表述性状态转移。
基于HTTP协议
一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
简单来说就是url地址中只包含名词表示资源,使用http动词表示动作进行操作资源
举个例子:左边是错误的设计,而右边是正确的
GET /blog/getArticles --> GET /blog/Articles 获取所有文章
GET /blog/addArticles --> POST /blog/Articles 添加一篇文章
GET /blog/editArticles --> PUT /blog/Articles 修改一篇文章
GET /rest/api/deleteArticles?id=1 --> DELETE /blog/Articles/1 删除一篇文章
-----------------------------------1.8 UI自动化-----------------------------
Selenium
Appium
其实UI的自动化实现的原理都是很类似的,基本的逻辑都是:
定位元素
操作元素
获取反馈
最后通过某种测试用例框架来管理测试用例,例如python的unittest,JAVA的TestNG,Ruby的respec等等。