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

打印 上一主题 下一主题

主题 1733|帖子 1733|积分 5209


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

故意放弃吧,但是看着那么高的薪资,还是很眼热的!但是说吧,可感觉自己说的是不是太简单了,能成么?其实,大家远远不需要这么担心,因为主动化测试没有大家想的那么秘密,那么可骇,说出了本质,那就是都一样的!
主动化测试的本质:是把以人为驱动的测试举动转化为呆板实行的一种过程。一般,在计划了测试用例并通过评审之后,由测试职员根据测试用例中描述的规程一步步实行测试,得到现实结果与期望结果的比较。主动化测试的目标是,为了节省人力、时间或硬件资源,进步测试服从。——这是百度百科中的介绍。
从上面一段文字描述中,我们可以或许知道主动化测试跟手工测试有着密切的关系,并且是先有手工测试,计划测试用例,再将测试过程转换为脚本语言,让盘算机运行的过程。
所以,大家在在进行主动化测试的过程实现的时候,一定要根据手工测试中使用的测试用例进行计划脚本,因为主动化测试要模仿人的现实操作。下面我们以现实案例说一下主动化测试的实现过程和手工测试的关系。
案例:在QQ注册页面,对QQ的注册进行功能测试。
页面地址:https://ssl.zc.qq.com/v3/index-chs.html
确认页面中各个表单位素的需求:

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

    接下来我们计划一条测试用例:
【用例标题】各项信息填写正确,注册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都安装成功)。
  1. # 导入Selenium包和time包
  2. from selenium import webdriver
  3. from time import sleep
  4. # 定义函数
  5. def test_qq_reg():
  6.     # 定义浏览器驱动
  7.     driver = webdriver.Firefox()
  8.     # 打开页面
  9.     driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
  10.     # 休眠2秒钟
  11.     sleep(2)
  12.     # 在昵称文本框输入 “测试凯哥”
  13.     driver.find_element_by_id("nickname").send_keys("测试凯哥")
  14.     sleep(2)
  15.     # 在密码文本框 输入“TestKai2020”
  16.     driver.find_element_by_id("password").send_keys("TestKai2020")
  17.     sleep(2)
  18.     # 在手机号文本框输入  “13366244232”
  19.     driver.find_element_by_id("phone").send_keys("13366244232")
  20.     sleep(2)
  21.     # 点击 发送短信验证码 按钮
  22.     driver.find_element_by_id("send-sms").click()
  23.     sleep(2)
  24.     # 在短信验证码文本框输入 321234
  25.     driver.find_element_by_id("code").send_keys("321234")
  26.     sleep(2)
  27.     # 点击 立即注册 按钮
  28.     driver.find_element_by_id("get_acc").click()
  29.     sleep(2)
  30.     # 判断注册后页面是否跳转到 成功页(预期结果)
  31.     exp_url = "https://ssl.zc.qq.com/v3/success.html"
  32.     sleep(2)
  33.     # 浏览器获取页面url地址
  34.     real_url = driver.current_url
  35.     # 判断实际结果和预期结果是否相同  相同就输出  success
  36.     # 如果不同就截图保存
  37.     if exp_url == real_url:
  38.         print("success")
  39.     else:
  40.         driver.get_screenshot_as_file("./test_qq.png")
  41. # 调用函数,运行脚本
  42. test_qq_reg()
复制代码
以上内容就是把我们手工测试用例中的内容完全使用主动化脚本去实现,不要崇拜凯哥哦!只要好勤学了,都能学会!

但这还只是开始,刚才我们就说了,如果要改变测试数据,难道要我去改代码么?那还不如手工测试呢!接下来,我们就看看如何实现主动化脚本迭代运行。
我们使用CSV表格进行测试数据的构建和保存。

然后,在脚本中导入数据。下面直接看代码:
  1. # 导入Selenium包和time包
  2. from selenium import webdriver
  3. from time import sleep
  4. # 导入csv包
  5. import csv
  6. # 定义函数
  7. def test_qq_reg():
  8.     # 读取csv中的数据(默认会以列表嵌套的形式保存数据到脚本的变量中)
  9.     data = csv.reader(open('reg_qq.csv','r'))   
  10.     # 定义浏览器驱动
  11.     driver = webdriver.Firefox()
  12.     # 使用循环获取data中的列表数据
  13.     for info in data :
  14.         # 定义昵称变量,获取列表中的用户名
  15.         name = info[0]
  16.         # 定义密码变量,获取列表中的密码
  17.         passwd = info[1]
  18.         # 定义手机号变量,获取列表中的手机号
  19.         phone = info[2]
  20.         # 定义验证码变量,获取列表中的验证码
  21.         code = info[3]
  22.         '''
  23.         将代码中输入数据的地方都用上面的变量代替
  24.         '''
  25.         # 打开页面
  26.         driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
  27.         # 休眠2秒钟
  28.         sleep(2)
  29.         # 在昵称文本框输入 “测试凯哥”
  30.         driver.find_element_by_id("nickname").send_keys(name)
  31.         sleep(2)
  32.         # 在密码文本框 输入“TestKai2020”
  33.         driver.find_element_by_id("password").send_keys(passwd)
  34.         sleep(2)
  35.         # 在手机号文本框输入  “13366244232”
  36.         driver.find_element_by_id("phone").send_keys(phone)
  37.         sleep(2)
  38.         # 点击 发送短信验证码 按钮
  39.         driver.find_element_by_id("send-sms").click()
  40.         sleep(2)
  41.         # 在短信验证码文本框输入 321234
  42.         driver.find_element_by_id("code").send_keys(code)
  43.         sleep(2)
  44.         # 点击 立即注册 按钮
  45.         driver.find_element_by_id("get_acc").click()
  46.         sleep(2)
  47.         # 判断注册后页面是否跳转到 成功页(预期结果)
  48.         exp_url = "https://ssl.zc.qq.com/v3/success.html"
  49.         sleep(2)
  50.         # 浏览器获取页面url地址
  51.         real_url = driver.current_url
  52.         # 判断实际结果和预期结果是否相同  相同就输出  success
  53.         # 如果不同就截图保存
  54.         if exp_url == real_url:
  55.             print("success")
  56.         else:
  57.             driver.get_screenshot_as_file("./test_qq.png")
  58.         sleep(2)
  59. # 调用函数,运行脚本
  60. test_qq_reg()
复制代码
然后可能尚有网友说,那用到了框架怎么办呢?我们上面的代码,没有使用任何框架,可以理解为就是个人举动,但是企业内里的代码是要统一管理的,各自写各自的,没有统一尺度那怎么行啊?于是就有了unittest这样的框架,进行代码编写和组合的规范化,尚有了像HTMLTestRunner这样可以或许生成网页版测试陈诉的外部库和包(也称为框架)。所以我们的代码又可以强化了:
  1. # 导入Selenium包和time包
  2. from selenium import webdriver
  3. from time import sleep
  4. # 导入csv包
  5. import csv
  6. # 导入unittest包
  7. import unittest
  8. #导入生成HTML测试报告的包
  9. from HTMLTestRunner import HTMLTestRunner
  10. # 定义测试类,继承unittest
  11. class QQ(unittest.TestCase):
  12.     # 定义函数
  13.     def test_qq_reg(self):
  14.         # 读取csv中的数据(默认会以列表嵌套的形式保存数据到脚本的变量中)
  15.         data = csv.reader(open('reg_qq.csv','r'))   
  16.         # 定义浏览器驱动
  17.         driver = webdriver.Firefox()
  18.         # 使用循环获取data中的列表数据
  19.         for info in data :
  20.             # 定义昵称变量,获取列表中的用户名
  21.             name = info[0]
  22.             # 定义密码变量,获取列表中的密码
  23.             passwd = info[1]
  24.             # 定义手机号变量,获取列表中的手机号
  25.             phone = info[2]
  26.             # 定义验证码变量,获取列表中的验证码
  27.             code = info[3]
  28.             '''
  29.             将代码中输入数据的地方都用上面的变量代替
  30.             '''
  31.             # 打开页面
  32.             driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
  33.             # 休眠2秒钟
  34.             sleep(2)
  35.             # 在昵称文本框输入 “测试凯哥”
  36.             driver.find_element_by_id("nickname").send_keys(name)
  37.             sleep(2)
  38.             # 在密码文本框 输入“TestKai2020”
  39.             driver.find_element_by_id("password").send_keys(passwd)
  40.             sleep(2)
  41.             # 在手机号文本框输入  “13366244232”
  42.             driver.find_element_by_id("phone").send_keys(phone)
  43.             sleep(2)
  44.             # 点击 发送短信验证码 按钮
  45.             driver.find_element_by_id("send-sms").click()
  46.             sleep(2)
  47.             # 在短信验证码文本框输入 321234
  48.             driver.find_element_by_id("code").send_keys(code)
  49.             sleep(2)
  50.             # 点击 立即注册 按钮
  51.             driver.find_element_by_id("get_acc").click()
  52.             sleep(2)
  53.             # 判断注册后页面是否跳转到 成功页(预期结果)
  54.             exp_url = "https://ssl.zc.qq.com/v3/success.html"
  55.             sleep(2)
  56.             # 浏览器获取页面url地址
  57.             real_url = driver.current_url
  58.             # 判断实际结果和预期结果是否相同  相同就输出  success
  59.             # 如果不同就截图保存
  60.             if exp_url == real_url:
  61.                 print("success")
  62.             else:
  63.                 driver.get_screenshot_as_file("./test_qq.png")
  64.             sleep(2)
  65. #生成单元测试流程
  66. testunit = unittest.TestSuite()
  67. #加载测试用例,可以把多人的测试用例导入进来,放在一起:
  68. testunit.addTest(QQ("test_qq_reg"))
  69. #创建测试报告
  70. fp=open('./result.html','wb')
  71. runner = HTMLTestRunner(stream=fp,
  72.                         title="QQ注册测试",
  73.                        description="用例执行情况:")
  74. runner.run(testunit)
  75. fp.close()
复制代码
好看到这里,盼望可以或许消除大家对主动化测试实现过程的恐惊,真的没有那么多难点!如果大家尚有什么疑惑,可以找凯哥深入沟通和交流哦!

看到这里的好心人,请点个赞吧,你的鼓励是我继承创作的气力!谢谢!
最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【包管100%免费】

软件测试面试文档

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

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




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表