软件测试工程师面试如何描述自动化测试是怎么实现的?

软件测试工程师面试的时候,但凡简历中有透露一点点自己会自动化测试的技能点的描述,都会被面试官问,那你结合你的测试项目说说自动化测试是怎么实现的?一到这里,很多网友,包括我的学生,也都一脸懵逼的样子。

有心放弃吧,但是看着那么高的薪资,还是很眼热的!但是说吧,可感觉自己说的是不是太简单了,能成么?其实,大家远远不需要这么担心,因为自动化测试没有大家想的那么神秘,那么可怕,说出了本质,那就是都一样的!

自动化测试的本质:是把以人为驱动的测试行为转化为机器执行的一种过程。一般,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。自动化测试的目的是,为了节省人力、时间或硬件资源,提高测试效率。——这是百度百科中的介绍。

从上面一段文字描述中,我们能够知道自动化测试跟手工测试有着密切的关系,并且是先有手工测试,设计测试用例,再将测试过程转换为脚本语言,让计算机运行的过程。

所以,大家在在进行自动化测试的过程实现的时候,一定要根据手工测试中使用的测试用例进行设计脚本,因为自动化测试要模拟人的实际操作。下面我们以实际案例说一下自动化测试的实现过程和手工测试的关系。

案例:在QQ注册页面,对QQ的注册进行功能测试。

页面地址:https://ssl.zc.qq.com/v3/index-chs.html

确认页面中各个表单元素的需求:

1、昵称:必填;不能超过24个字母或12个汉字
2、密码:必填;8-16个字符;必须包含字母、数字、符号中至少2种
3、国家地区编码:默认+ 86
4、手机号:格式必须正确;用来接收验证码
5、验证码:输入收到的验证码
6、手机号符合要求,可以点击【发送短信验证码】;否则不可点击;
7、用户协议复选框默认处于勾选状态。

在这里插入图片描述

接下来我们设计一条测试用例:

【用例标题】各项信息填写正确,注册QQ

【测试步骤】

1)打开Firefox浏览器

2)在浏览器地址栏输入页面地址:https://ssl.zc.qq.com/v3/index-chs.html

3)在昵称文本框输入:测试小梧

4)密码框输入:TestKai2020

5)手机号码输入:13366244232(未注册过)

6)点击【发送短信验证码】按钮

7)输入收到的短信验证码:321564

8)点击【立即注册】按钮

【预期结果】

页面跳转到:注册成功页面。

(假如页面地址为:https://ssl.zc.qq.com/v3/success.html)

如果大家觉得上面没问题,能看懂,那说明我的测试用例写的还行哦!

但是这是刚刚开始,测试用例的设计就是这个样子,大家都看得懂的测试用例才是好的用例。执行就不说了,因为接下来我们要说的是如何利用自动化进行实现。

自动化测试有三点核心内容:脚本语言,对象识别,自动执行和结果判断。这不是什么名人名言,是凯哥自己说的。

首先,选脚本语言。我们就选择比较流行的Python。简单、好用、时髦。选择Python3.7版本,不高也不低,正好。

其次,做Web系统的自动化测试,我们选择对象识别机制的时候就选择Selenium(有同学可能说QTP/UFT也行,但是我想说这个Selenium不花钱)。Selenium就不介绍了。安装好Python后,直接使用pip install selenium就能装上。

最后,自动执行我们要用外部参数文件,脚本写好了,使用参数化多跑几次,总不能换一个数据(手工测试要用到等价类、边界值或者其他很多正常数据),就改一次代码吧?还有,结果得计算机通过脚本自动的判断,如果没有,那还叫什么自动化?

当我们确定好了这几个内容之后,就可以开始写代码了。(确保Python、Selenium都安装成功)。

# 导入Selenium包和time包
from selenium import webdriver
from time import sleep# 定义函数
def test_qq_reg():# 定义浏览器驱动driver = webdriver.Firefox()# 打开页面driver.get("https://ssl.zc.qq.com/v3/index-chs.html")# 休眠2秒钟sleep(2)# 在昵称文本框输入 “测试凯哥”driver.find_element_by_id("nickname").send_keys("测试凯哥")sleep(2)# 在密码文本框 输入“TestKai2020”driver.find_element_by_id("password").send_keys("TestKai2020")sleep(2)# 在手机号文本框输入  “13366244232”driver.find_element_by_id("phone").send_keys("13366244232")sleep(2)# 点击 发送短信验证码 按钮driver.find_element_by_id("send-sms").click()sleep(2)# 在短信验证码文本框输入 321234driver.find_element_by_id("code").send_keys("321234")sleep(2)# 点击 立即注册 按钮driver.find_element_by_id("get_acc").click()sleep(2)# 判断注册后页面是否跳转到 成功页(预期结果)exp_url = "https://ssl.zc.qq.com/v3/success.html"sleep(2)# 浏览器获取页面url地址real_url = driver.current_url# 判断实际结果和预期结果是否相同  相同就输出  success# 如果不同就截图保存if exp_url == real_url:print("success")else:driver.get_screenshot_as_file("./test_qq.png")# 调用函数,运行脚本
test_qq_reg()

以上内容就是把我们手工测试用例中的内容完全使用自动化脚本去实现,不要崇拜我哦!只要好好学了,都能学会!
在这里插入图片描述

但这还只是开始,刚才我们就说了,如果要改变测试数据,难道要我去改代码么?那还不如手工测试呢!接下来,我们就看看如何实现自动化脚本迭代运行。

我们使用CSV表格进行测试数据的构建和保存。
在这里插入图片描述
然后,在脚本中导入数据。下面直接看代码:

# 导入Selenium包和time包
from selenium import webdriver
from time import sleep
# 导入csv包
import csv# 定义函数
def test_qq_reg():# 读取csv中的数据(默认会以列表嵌套的形式保存数据到脚本的变量中)data = csv.reader(open('reg_qq.csv','r'))    # 定义浏览器驱动driver = webdriver.Firefox()# 使用循环获取data中的列表数据for info in data :# 定义昵称变量,获取列表中的用户名name = info[0]# 定义密码变量,获取列表中的密码passwd = info[1]# 定义手机号变量,获取列表中的手机号phone = info[2]# 定义验证码变量,获取列表中的验证码code = info[3]'''将代码中输入数据的地方都用上面的变量代替'''# 打开页面driver.get("https://ssl.zc.qq.com/v3/index-chs.html")# 休眠2秒钟sleep(2)# 在昵称文本框输入 “测试凯哥”driver.find_element_by_id("nickname").send_keys(name)sleep(2)# 在密码文本框 输入“TestKai2020”driver.find_element_by_id("password").send_keys(passwd)sleep(2)# 在手机号文本框输入  “13366244232”driver.find_element_by_id("phone").send_keys(phone)sleep(2)# 点击 发送短信验证码 按钮driver.find_element_by_id("send-sms").click()sleep(2)# 在短信验证码文本框输入 321234driver.find_element_by_id("code").send_keys(code)sleep(2)# 点击 立即注册 按钮driver.find_element_by_id("get_acc").click()sleep(2)# 判断注册后页面是否跳转到 成功页(预期结果)exp_url = "https://ssl.zc.qq.com/v3/success.html"sleep(2)# 浏览器获取页面url地址real_url = driver.current_url# 判断实际结果和预期结果是否相同  相同就输出  success# 如果不同就截图保存if exp_url == real_url:print("success")else:driver.get_screenshot_as_file("./test_qq.png")sleep(2)# 调用函数,运行脚本
test_qq_reg()

然后可能还有网友说,那用到了框架怎么办呢?我们上面的代码,没有使用任何框架,可以理解为就是个人行为,但是企业里面的代码是要统一管理的,各自写各自的,没有统一标准那怎么行啊?于是就有了unittest这样的框架,进行代码编写和组合的规范化,还有了像HTMLTestRunner这样能够生成网页版测试报告的外部库和包(也称为框架)。所以我们的代码又可以强化了:

# 导入Selenium包和time包
from selenium import webdriver
from time import sleep
# 导入csv包
import csv
# 导入unittest包
import unittest
#导入生成HTML测试报告的包
from HTMLTestRunner import HTMLTestRunner# 定义测试类,继承unittest
class QQ(unittest.TestCase):# 定义函数def test_qq_reg(self):# 读取csv中的数据(默认会以列表嵌套的形式保存数据到脚本的变量中)data = csv.reader(open('reg_qq.csv','r'))    # 定义浏览器驱动driver = webdriver.Firefox()# 使用循环获取data中的列表数据for info in data :# 定义昵称变量,获取列表中的用户名name = info[0]# 定义密码变量,获取列表中的密码passwd = info[1]# 定义手机号变量,获取列表中的手机号phone = info[2]# 定义验证码变量,获取列表中的验证码code = info[3]'''将代码中输入数据的地方都用上面的变量代替'''# 打开页面driver.get("https://ssl.zc.qq.com/v3/index-chs.html")# 休眠2秒钟sleep(2)# 在昵称文本框输入 “测试凯哥”driver.find_element_by_id("nickname").send_keys(name)sleep(2)# 在密码文本框 输入“TestKai2020”driver.find_element_by_id("password").send_keys(passwd)sleep(2)# 在手机号文本框输入  “13366244232”driver.find_element_by_id("phone").send_keys(phone)sleep(2)# 点击 发送短信验证码 按钮driver.find_element_by_id("send-sms").click()sleep(2)# 在短信验证码文本框输入 321234driver.find_element_by_id("code").send_keys(code)sleep(2)# 点击 立即注册 按钮driver.find_element_by_id("get_acc").click()sleep(2)# 判断注册后页面是否跳转到 成功页(预期结果)exp_url = "https://ssl.zc.qq.com/v3/success.html"sleep(2)# 浏览器获取页面url地址real_url = driver.current_url# 判断实际结果和预期结果是否相同  相同就输出  success# 如果不同就截图保存if exp_url == real_url:print("success")else:driver.get_screenshot_as_file("./test_qq.png")sleep(2)#生成单元测试流程
testunit = unittest.TestSuite()
#加载测试用例,可以把多人的测试用例导入进来,放在一起:
testunit.addTest(QQ("test_qq_reg"))
#创建测试报告
fp=open('./result.html','wb')
runner = HTMLTestRunner(stream=fp,title="QQ注册测试",description="用例执行情况:")
runner.run(testunit)
fp.close()

好看到这里,希望能够消除大家对自动化测试实现过程的恐惧,真的没有那么多难点!如果大家还有什么疑惑,可以找我深入沟通和交流哦!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战  

三、Web自动化项目实战


四、App自动化项目实战  

五、一线大厂简历


六、测试开发DevOps体系  

七、常用自动化测试工具

八、JMeter性能测试  

九、总结(文末尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8月9日上课内容 nginx负载均衡

负载均衡工作当中用的很多的,也是面试会问的很重要的一个点 负载均衡:通过反向代理来实现(nginx只有反向代理才能做负载均衡) 正向代理的配置方法(用的较少) 反向代理的方式:四层代理与七层代…

使用chatGPT-4 畅聊量子物理学

与chatGPT深入研究起源、基本概念,以及海森堡、德布罗意、薛定谔、玻尔、爱因斯坦和狄拉克如何得出他们的想法和方程。 1965 年,费曼(左)与朱利安施温格(未显示)和朝永信一郎(右)分享…

C 语言的 ctype.h 头文件

C 语言的 ctype.h 头文件包含了很多字符函数的函数原型, 可以专门用来处理一个字符, 这些函数都以一个字符作为实参. ctype.h 中的字符测试函数如表所示: 这些测试函数返回 0 或 1, 即 false 或 true. ctype.h 中的字符映射函数如表所示: 字符测试函数不会修改原始实参, 只会…

Python入门02

0目录 1.容器操作(序列操作) 2.函数 3.模块 1.容器操作(序列操作) 列表的基本操作 定义一个列表[] 访问列表(打印或者通过下标和索引) 新增元素 Append(在末尾) 指定位置新增元素 Insert 删除&…

Oracle 开发篇+Java通过DRCP访问Oracle数据库

标签:DRCP、Database Resident Connection Pooling、数据库驻留连接池释义:DRCP(全称Database Resident Connection Pooling)数据库驻留连接池(Oracle自己的数据库连接池技术) ★ Oracle开启并配置DRCP sq…

文旅行业苦“黄牛”久矣,消失的门票到底去哪儿了?

今年年初以来,文化与旅游行业强势复苏,明星演唱会、热门景区及文博科技馆成为了“黄牛党”肆虐的重灾区,高价倒卖票、代抢服务等层出不穷,严重扰乱了文旅票务市场秩序。 如何解决黄牛“顽疾”,成为了文旅行业共同关注…

现代C++中的从头开始深度学习【2/8】:张量编程

一、说明 初学者文本:此文本需要入门级编程背景和对机器学习的基本了解。张量是在深度学习算法中表示数据的主要方式。它们广泛用于在算法执行期间实现输入、输出、参数和内部状态。 在这个故事中,我们将学习如何使用特征张量 API 来开发我们的C算法。具…

20230806将ASF格式的视频转换为MP4

20230806将ASF格式的视频转换为MP4 2023/8/6 18:47 缘起,自考中山大学的《计算机网络》,考试《数据库系统原理》的时候找到视频,由于个人的原因,使用字幕更加有学习效率! 由于【重型】的PR2023占用资源较多&#xff0c…

设计模式——单例模式(懒汉和饿汉)

单例模式 一、概念 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。一个类只能有一个实例在生活中是很常见的,比如打印机程…

Python 如何获取图片中的文字----OCR安装使用

环境: windows10, anaconda3 背景:使用conda install pytesseract 安装失败 解决方法: 从Index of /tesseract (uni-mannheim.de)中下载最新的安装包 https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.1.20230401.exe 点击…

【Linux】冯诺伊曼体系结构|操作系统概念理解

个人主页:🍝在肯德基吃麻辣烫 我的gitee:Linux仓库 个人专栏:Linux专栏 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处 文章目录 前言一、先谈硬件——冯诺依曼体系结构1.什么是冯诺依曼体系结构&am…

「文本隐写」相关会议期刊投稿注意事项

前言:本篇博客总结「文本隐写」研究领域相关会议与期刊的投稿注意事项。 目录 一、会议ACL (The Annual Meeting of the Association for Computational Linguistics)IH&MMSec (The ACM Workshop on Information Hiding, Multimedia and Security)CCS (The ACM …

Centos7.9_解决每次重启机器配置的java环境变量都需要重新source /etc/profile才生效的问题---Linux工作笔记060

这种情况需要把环境变量,java的环境变量在/root/.bashrc文件中也放一份,注意这个文件是隐藏的,默认是,需要进行ls -a才能显示. #jdk export JAVA_HOME/lib/jvm export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/b…

【学习FreeRTOS】第3章——FreeRTOS移植及配置文件

1.FreeRTOS源码简介 【一级目录:/】以下FreeRTOS的源码,其中,FreeRTOS文件夹最为重要,代笔FreeRTOS内核 【二级目录:/FreeRTOS】以下为FreeRTOS文件夹的内容,比较重要的有Demo文件夹和Source文件夹 【三级…

兰州https证书申请

https证书是由CA认证机构颁发的数字证书,可以为域名网站或者公网IP网站提供信息加密服务,正规CA认证机构签发的https证书可以兼容99%的主流浏览器和IOS、Windows系统,同样,现在流行的小程序也需要https证书。那么,该怎…

语音秘书:让录音转文字识别软件成为你的智能工作助手

每当在需要写文章的深夜,我的思绪经常跟不上我的笔,即便是说出来用录音机录下,再书写出来,也需要耗费大量时间。这个困扰了我很久的问题终于有了解决的办法,那就是录音转文字软件。它像个语言魔术师,将我所…

一文告诉你,Intellij IDEA神器隐藏的11种实用小技巧!

el/2022/10/4 6:58:50 点击上方“程序员大咖”,选择“置顶公众号” 关键时刻,第一时间送达! Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对Intellij IDEA的喜爱&#x…

Docker制作SpringBoot镜像

Dcokerfile目录 编写Dockerfile FROM openjdk:8 #发布到网上时只会把jar包和Dockerfile发布上去RUN mkdir -p /opt/javaCOPY app.jar /opt/java/app.jar #地址映射 #CMD ["--server.port8080"] #对外暴露端口(可以任意修改) EXPOSE 15009 #执行命令 #ENTRYPOINT [&q…

安卓读取,添加,更新,删除联系人,读取短信

目录 读取联系人 添加联系人 更新联系人 删除联系人 读取短信 读取联系人 安卓可以通过contentResolver来读取联系人表,联系人表的Uri信息是:content://com.android.contacts/data/phones 从而输出联系人信息, 需要相关权限&#xff1a…

Pod进阶

目录 一、资源限制 1. CPU 资源单位 2.内存 资源单位 3.示例 二、重启策略 三、健康检查(探针) 1.探针的三种规则: 1.1就绪探测 2.Probe支持三种检查方法: 2.1exec检查方式 2.2httpGet方式 2.3tcpSocket方式 3. 启动、退出动作…