自动化测试那些事儿

2508 篇文章 33 订阅
1410 篇文章 7 订阅

在这里插入图片描述

一、背景

自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。

在这里先引用百度百科解释下什么是自动化测试,了解概念后我们新手应该怎么在职场落地自动测试呢?既然是自动化测试要么通过工具要么编写代码完来成我们测试工作。

在职场,自动化测试对象不同所诞生的自动测试名称不一样,一般自动测试分为web自动化测试、app(移动)自动化测试、接口自动化测试、单元测试自动化测试、性能自动化测试等等,对于 UI 自动化来说稳定性一般,维护成本比较高,导致很多企业不好落地,但是接口自动化,单元测试自动化等小工具测试自动化反而成为公司提效火箭。

对于新手来说掌握自动化测试本质很重要,老祖宗告诉我们无论世界怎么变化,变化的规律不变,明白规律与本质,我们就能通过一分耕耘一分收获,十分耕耘十分收获来积累能量。自动化测试的本质是先写一段代码,然后去测试另一段代码,实现自动化测试用例本身属于开发工作。

既然明白自动测试本身是什么,就可以针对这些本质积累相关本事,让自己慢慢掌握这些内容。我们在学习自动化技术过程中还需要学习业务知识、测试技术、测试用例设计等综合能力,要明白任何技术都是为了解决市场空白、痛点、缺陷、差距产生,明白这些内涵后,再慢慢学习与思考就会掌握《列子臆说》中说的“投隙抵时,应事无方”。

二、什么项目能做自动化

什么样的项目可以做自动测试呢?这里提供几种思路,给大家做个参考。

第一种、需求稳定产品,因为编写的自动化测试用例也是有维护成本的,如果需求变动快维护成本自然上去。

第二种、软件发布频繁且生命周期长的,每次发布都需要全部回归的、用例可以重复使用的产品,都是可以开发一些自动化工具帮助我们执行回归产品。

第三种、业务测试不能实现的或者实现比较麻烦的都可以使用自动化测试覆盖,比如我们这边的 IM 消息测试每次回归 IM 都需要不断发送不同类型消息来覆盖不同场景,这样的场景我们就可以编写自动化用例来协助我们完成业务测试。

第四种、重复性功能回归测试,比如之前测试网银支付,每次提交一笔金额测试人员都需要登录不同系统进行审核与确定,这些步骤都是重复性工作不需要思考什么业务逻辑的只要确定金额一致性通过就行,这样的步骤与业务就可以使用自动化回归。

总之,只要有自动测试思维与意识就能在工作中灵活使用自动化测试技术完成我们工作进而提高效率节约时间,大家在使用自动化测试技术时需要多角度思考自动测试的价值,并不是全部场景都适合自动化测试,如果维护自动化测试案例的代价高于测试成本,那么这样的 项目中推进自动化测试就会得不偿失,我们在落地自动化测试时需要灵活掌握自动化测本质,自动化测试就是把重复工作的测试行为转化为代码执行行为从而节约测试人员时间,让测试人员将更多的精力放在新功能的测试、产品思考还有测试用例设计上。

三、常见自动化类型

1、web 自动化

对于 web 自动化测试,我们一般使用市场成熟技术,比如 Selenium 、QTP、WATIR、UFT、Watir、Robot Framework 等等。对于我之前的工作基本是使用 Selenium 来做 Web 自动化,接下来使用 Selenium 来演示 web 自动怎么上手工作,在做之前我们先了解下它怎么工作,这样方便我们后期怎么开展工作,对于 Selenium WebDriver 是典型的 Server-Client 模式,Server 端就是 Remote Server ,工作内容大概是:

WebDriver 启动目标浏览器,并绑定至指定端口,启动的浏览器实例将作为 WebDriver 的Remote Server;

Client 端通过 CommandExcuter 发送 HTTPRequest 给 Remote Server 的侦听端口(通信协议:the webdriver wire protocol);

Remote Server 需要依赖原生的浏览器组件来转化浏览器的 native 调用;

了解上面信息后就可以用 Selenium 简单一个案例入门 web 自动化测试。

第一步下载原生的浏览器组件,下载地址为chromedriver

第二步选择自己擅长的开发语言,这里使用 python 进行演示:

先安装 selenium 模块,安装命令如下:

pip install seleniu

第三步编写测试代码

from selenium import webdriver

import time



def runSelenium():

   chrome_path = r'../driver/chromedriver' # chromedriver 路径

   driver = webdriver.Chrome(chrome_path)  # 加载chromedriver驱动

   driver.maximize_window() #启动浏览器最大化

   driver.get('https://www.ziroom.com/') # 访问测试网站

   time.sleep(2)  # 停顿 2 秒

   driver.quit() # 关闭了Chrome浏览器



if __name__ == '__main__':

   runSelenium()

   pass

以上就是简单的 Web 自动测试上手,代码简单没有几行就解决咱们模拟 web 页面操作,如果我们要操作元素能用哪些方法呢?selenium 为我们提供如下方法可以使用。

图片

在实际工作中最常用方参考如下,大家在学习过程中需要单独去学习xpath、id、name、class等技巧定位,要想做地更好需要自己思考总结。

find_element_by_id()

find_element_by_name()

find_element_by_class_name()

find_element_by_xpath()

....

第四步设计自动化测试案例,让代码帮助我们执行测试用例,记得增加断言,如果没有断言,自动执行它可不认识案例是否正确。

对于 selenium 还有很多使用技巧大家在实践工作中慢慢掌握它,这里就不展开介绍。

上面只是提供一种 web 自动测试方法,市场上面有很多大家可以选择适合自己的工具完成工作,如果想把自动化做好,还需要设计自动化测试框架,对于框架设计可以用平台,也可以是代码,对于执行思想可以使用数据驱动测试、行为驱动测试、分布式执行测试等等方法。

2、app 自动化

对于 app 自动化测试可以选择 Appium 也可以选择 uiautomator2、ATX等工具做自动测试,如果要开展 app 自动化测试建议使用 ATX 自动化做,因为它比较轻巧,安装快捷,还可以一边写cace,一边进行调试,大家只要用才知道好用。下面带着大家一起安装 ATX 做自动化测试。

第一步安装 adb 命令:

liwen@localhost ~ % adb --version

Android Debug Bridge version 1.0.41

Version 33.0.3-8952118

Installed as /Users/liwen/Library/Android/sdk/platform-tools/adb

liwen@localhost ~ %

第二步插上手机输入命令:

liwen@localhost ~ % adb devices

List of devices attached

ceb5dcb3 device

# 如果是模拟器操作,需要先安装模拟器,再连接模拟器

liwen@localhost ~ % adb connect 127.0.0.1:5555

connected to 127.0.0.1:5555

第三步执行:

# python -m uiautomator2 init

liwen@localhost ~ % python -m uiautomator2 init

[I 230107 19:10:37 init:156] uiautomator2 version: 2.16.19

[I 230107 19:10:37 init:373] Install minicap, minitouch

[D 230107 19:10:37 init:62] Download https://tool.appetizer.io/openatx/stf-binaries/raw/0.3.0/node_modules/@devicefarmer/minitouch-prebuilt/prebuilt/arm64-v8a/bin/minitouch

minitouch |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 34.1 KB/34.1 KB

....

[D 230107 19:10:42 init:362] atx-agent version 0.10.0

[D 230107 19:10:42 init:366] device wlan ip: 192.168.31.11

Successfully init AdbDevice(serial=ceb5dcb3)

安装成功后手机或者模拟器显示 ATX :

图片

第四步UIautomator安装

liwen@localhost ~ %  pip3 install -U --pre uiautomator2

Installing collected packages: filelock, adbutils, uiautomator2

 WARNING: The script uiautomator2 is installed in '/Users/liwen/Library/Python/3.8/bin' which is not on PATH.

 Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Successfully installed adbutils-1.2.2 filelock-3.9.0 uiautomator2-2.16.22

第五步安装web调试工具 weditor 并启动 weditor

liwen@localhost ~ % pip3 install --pre weditor

liwen@localhost ~ % python3 -m weditor

listening on http://192.168.31.5:17310

[I 230107 19:20:20 web:2239] 200 GET / (::1) 7.81ms

[I 230107 19:20:20 web:2239] 200 GET /cdn.jsdelivr.net/bootstrap/3.3.7/css/bootstrap.min.css (::1) 7.90ms

[I 230107 19:20:20 web:2239] 200 GET /unpkg.com/element-ui/lib/theme-chalk/index.css (::1) 3.66ms

[I 230107 19:20:20 web:2239] 200 GET /static/libs/css/buttons.css (::1) 3.59ms

第六步浏览器会自动打开显示我们要测试的app:

图片

第七步编写案例脚本来操作app

图片

对于脚本怎么编写,这我们先用最简单的 id 定位来操作app,对于复杂的定位大家需要单独学习自动化定位方式,下面是简单参考代码。

import uiautomator2 as u2



d = u2.connect_usb('127.0.0.1:5555') # 通过USB(手机的序列号可以通过adb devices获取到

d(resourceId="com.ziroom.ziroomcustomer:id/tv_tab_jfk").click() # #这个地方还可以用文本定位如:

d(text="服务").click()

# 如果是文本框应该怎么写?

d(text="请输入用户名/手机号/邮箱").set_text("18210992070")

我们可以在文本里写代码,也可以直接在该页面写调试代码,显示如下:

图片

对于 ATX 还有很多方法可以使用,大家可以在 github 上找到相关资料,这里就不展开讲解里面的方法怎么使用。我们实际开展自动化测试工作会结合 ATX + Pytest + Allure 一起搭建测试框架来写测试用例,对于他们怎么配合的大家自己找一找资料就能上手。

回顾下 atx 安装与简单上手使用步骤

1、安装 adb 并使手机或模拟器与电脑连接;

adb connect 127.0.0.1:62001 # 连接设备

adb devices # 查看连接设备

2、安装python-uiautomator2

pip3 install -U --pre uiautomator2

3、安装atx-agent

python3 -m uiautomator2 init

4、安装 weditor 工具定位原始

pip3 install --pre weditor # 安装

python3 -m weditor  # 启动web

5、编写自动化测试代码

import uiautomator2 as u2

d = u2.connect_usb('127.0.0.1:5555') 

zir = d.session("com.ziroom.ziroomcustomer")

zir(text="看房单").click()

我们在做UI自动测试需要考虑它的维护成本,这里提供一些思考如可以从提高自动化使用频率、脚本覆盖率、还有与研发协调好关键模块元素不能随便改动等等来提高收益,降低成本,只要合理使用 UI 自动化测试还是能帮助我们提高效率。

3、接口自动化

在《google 测试之道》一书,对于google产品,70%的投入为单元测试,20%为集成、接口测试,10% 为UI层的自动化测试,从测试金字塔自上而下依次是UI测试、接口测试、单元测试。

图片

接口测试位于单元测试与UI测试之间,它工作原理是通过接口测试工具模拟客户端向服务器发送请求,服务器接受请求并做出响应向客户端返回响应信息,验证返回结果,这就是接口测试。

四、常用测试工具

常用的测试工具有 cURL、Jmeter 、Postman、SoapUI、Robot Framework等等。

1.cURL:如果使用cURL命令行简单做一些验证性测试还是很方便的,操作如下。

图片

liwen@localhost ~ % curl -i -H “Accept: application/json” -X GET “http://localhost:8086/index”

命令中参数的含义如下:

第一个参数“-i”,说明需要显示 response 中的 header 信息;

第二个参数“-H”,用于设定 request 中请求头 header 信息;

第三个参数“-X”,用于指定执行的方法,这里使用了GET 方法,其他常见的方法还有 POST、PUT 和 DELETE 等等,如果不指定“-X”,那么默认执行方法是GET。

“http://localhost:8086/index” 指明被测 API 资源路径

当使用 cURL 进行 API 测试时,常用参数还有两个:

“-d”:用于设定 http 参数,http 参数可以直接加在 URL 的 query string,也可以用“-d”带入参数。参数之间可以用“&”串接,或使用多个“-d”。

“-b”:当需要传递 cookie 时,用于指定 cookie 文件的路径。

需要注意的是这些参数都是大小写非常敏感。cURL 只能发起 API 请求,它本身并不具备结果验证能力。

2.jmeter:在实际落地接口测试我们可以借用图形化 Jmeter 工具进行测试,大家都知道它不仅可以做接口测试,还能做性能测试,对于 Jmeter 怎么做性能的测试不在这节课中讲解。

下面我们带着大家怎么上手 Jmeter 做接口测试。

第一步安装 jmeter,第二步配置环境变量,第三步编写测试案例,第四步执行测试,对于 Jmeter 环境变量你也可以不配置环境变量,只是配置环境变量方便在控制台执行 Jmeter ,下面是在控制台执行 Jmeter 启动图:

图片

下面使用我们开始使用 Jmeter 演示怎么做接口测试:

2.1 线程组:第一步单机右键新建线程组。线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。

图片

作用:是一个测试计划执行的开始点,里面包含sampler,controller等等。

参数:

Name:线程组的名称,可以随意修改

Comments:备注信息,记录一些参数设置的原因和策略可填可不填

Action to be taken after a Sampler error:

线程内的采样器失败后,接下来采取的动作:

Continue:继续执行接下来的操作

Start Next Thread Loop:执行下一个线程循环

Stop Thread:退出该线程,不再执行该线程的任何操作

Stop Test:等待该线程的采样结束后,结束整个测试,不会立即停止

Stop Test Now:立即停止整个测试

Thread Properites:线程属性
Number of Threads(users):线程数,也就是一共要启动多少线程用来并发执行

Ramp-uo Period(in seconds):多长时间将上一步设置的线程数启动完毕。设置不同的值可以验证在不同并发的情况下验证系统的性能

Loop Count:设置sampler循环的次数,勾上Forever后就会死循环一直执行

Scheduler:调度器,日程表。选上之后才能设置执行时间

Number of Threads * Loop Count就是Sampler执行的次数,可以在View Results Tree中看到。

Scheduler Configuration:

Duration(seconnds):请求的执行时间(Loop Count的Forever必须勾上才有效)

Startup delay(seconds):延迟时间,一般不用。但是如果想在指定的时间执行测试,可以用此配置。

setUp Thread Group、Thread Group和tearDown Thread Group3种线程组都可以设置。

Thread Group中的执行规则
setUp、Thread Group和tearDown 串行执行

2.2 http request请求:新建HTTP Request,在输入框中输入接口请求资源路径

图片

作用:用来向服务器发送HTTP/HTTPS请求

参数说明:

Name:组件名,可以修改

Comment:注释信息,可写可不写

Web Server:

Protocol[http]:不写就是默认的HTTP,可以根据实际情况指定

Server Name or IP:IP或者域名,比如cn.bing.com(不要加http://,默认就带;不能有路径)

HTTP Request:

Port Number:HTTP默认为80,https为443

Path:/表示根目录

Content encoding:内容编码,如果请求有乱码的话可以将其配置为UTF-8或者ANSI

配置项:默认值即可

Paramters:配置请求参数,比如添加key–àvalue、编码格式(url encode)、文件类型

Body data:当选择body Data时候并且输入json请求体后Parameters选项不能点击。【parameters and Body Data and Files Upload】不能同时选择。

Files upload:上传文件,一般不用,但是如果在做文件接口的时候就需要编写相关参数

2.3 结果查看树:添加 View Results Tree 来显示响应结果

图片

参数说明:查看结果的常用方式

Text:默认的显示方式,原始的HTML文本

HTML:以类似浏览器的格式查看响应数据

RegExp Tester:支持正则用来做检查点或者关联使用;(在做关联的时候可以在这里做调试是否写得是否正确)

XPath Tester:xpath方式提取内容;(在做关联的时候可以在这里做调试是否写得是否正确)

Scroll automatically:请求很多时可以自动滚屏

显示信息

Sampler Result:本次请求的汇总信息

请求信息:分为请求数据和请求头

响应信息:分为响应数据和响应头

Filename:可以将执行结果保存到Filename指定的文件中,注意:默认保存在jmeter的bin目录下。如果勾选了后面的Errors,那么只保存错误信息;如果勾选了Success,那么只保存执行成功的信息;都不勾选的话保存所有的信息

Browser:可以打开之前保存过的测试文件,将测试信息显示到下面的result栏中。如果勾选了后面的Errors,那么只显示错误信息;如果勾选了Success,那么只显示执行成功的信息;都不勾选的话显示所有的信息

2.4 响应断言:响应结果出来后,再添加响应断言

jmeter中有个组件叫断言(Assertion),它的作用和loadrunner中的检查点类似;用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。

图片

添加断言内容:

图片

Response Assertion:响应断言
作用:用来做检查点,对sampler做额外的检查,比如判断响应数据中是否存在指定的内容,也可以对请求数据做断言。

参数说明:

Apply to:指定断言的作用范围

–Main sample and sub-sample:作用于主main sample和子sub-sample

–Main sample only:只作用于main sample

–Sub-samples only:只作用于sub-sample

–JMeter Variable name to use:作用于JMeter变量

注意:

1、大多数情况下,可只勾选“main sample only”,因为一般情况下,发起一个请求,实际就只有一个请求。但是在某些情况下,发起一个请求时,会触发多个服务器请求,这时候就有main sample和sub-sample之分,类似ajax请求,另外,如果发起重定向请求,并且勾选“跟随重定向”, 则把重定向后的请求视为main-sample

2、如果sub-sample断言失败,但main sample断言成功,那么main sample也被设置为失败状态。如果作用域JMeter变量,且该变量关联main sample,那么如果断言失败,则main sample也被设置为失败(If the JMeter variable option is used, it is assumed to relate to the main sample, and any failure will be applied to the main sample only)。

3、如果执行完每个sampler的所有断言,变量JMeterThread.last_sample_ok会被设置为true或false

Field to test:

–Text Response:断言服务器返回的响应文本,比如body,不包含HTTP headers

–Response Code :断言响应码, 比如200

–Response Message:断言响应码的具体信息,比如OK

–Response Headers:断言响应头,包括Set-Cookie 头,如果有的话

–Resquest Headers:断言请求头

图片

Contains:如果文本中包含指定的正则表达式则为true

Matches:如果整个文本匹配指定的正则表达式则为true

Equals:如果整个文本等于给定的字符串(大小写敏感),则为true

Substring:如果整个文本包含给定的字符串(大小写敏感),则为true

Not:表示非,不匹配给定的模式,可以和前4个配合使用

Or:表示或,和前4个配合使用,有一个为true则为true

注意:

Contains, Matches:将字符串当做正则表达式处理

Equals,Substring:纯字符串,不会解析成正则表达式,大小写敏感

示例:用Substring模式和contains模式分别匹配:.*

Substring模式,将.*当做文本来匹配,所以会匹配失败

结果:

图片

Contains模式:

图片

执行成功

图片

Patterns to Test:

填写需要测试的模式列表, 每个模式都单独测试,如果某个模式失败了,不会往下检查剩余的模式。添加一个断言,多个测试模式(通过重复点击面板的添加按钮来添加多个测试模式),和多个断言,每个断言一个模式是一样的,就可以执行结果验证结果是否正确:

图片

如果我们把断言修改为其他,再次验证,接口就会显示失败如:

图片

点击红色断言标显示:

在这里插入图片描述

上面是简单接口怎么操作,如果是复杂接口你也可以通过组合不同线程组还有参数化来实现复杂接口测试,如果接口需要编程来完成,Jmeter 也支持脚本通过编写脚本来实现。如果先想定时执行接口测试 Jmeter 也可以集成 jenkins 来做,如果接口之间有依赖可以通过前置处理器与后置处理里面的配置元件来解决我们实际问题。

五、实例介绍

对于普通公司完全可以通过Jmeter 来完成接口自动化测试。

如果不使用页面工具测试接口,对于Java 来说可以使用 testng 结合 dataprovider来测试接口,对于 python 来说可以使用 pytest+requests来做接口测试。如果公司有平台,可以使用平台来做接口测试。

我们在做接口测试时候还需要有接口测试方案来做指导我们测试,下面提供一个接口测试回归方案供大家参考学习。

图片

接口自动化测试,是当前自动化测试中的首选,对于前后端分离的应用我们只要模拟不同接口的协议来验证接口响应是否达到预期结果,而且接口测试是自动化测试中最基本的、收益最能体现的测试工作;如果项目要做自动化测试,建议先通过接口测试覆盖项目逻辑,再做前端业务测试。

对于单元自动化测试与性能自动化测试、安全自动化测试,相对于上面比较难,需要的知识体系比较多,建议大家可以先把上面内容消化完毕后,再慢慢学习相关知识,相信不久就能入门,再坚持做几年能到中高级。

相信通过上面的学习大家应该能掌握常规自动化测试技术。自然界的动植物都在为生存拼尽全力,我们人类更应如此。认真并竭尽全力地工作,这是我们做人应履行的基本义务。“痴迷于工作,热衷于工作,并付出超出常人的努力”,这种不亚于任何人的努力会给我们带来丰硕的成果。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们 如果需要可以自行免费领取 【保证100%免费】
在这里插	入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值