当前位置: 代码迷 >> 综合 >> 【面试题Part1 】:测试工具Selenium+Appium+JMeter+Unittest
  详细解决方案

【面试题Part1 】:测试工具Selenium+Appium+JMeter+Unittest

热度:87   发布时间:2024-02-05 04:27:38.0

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等等。

  相关解决方案