自动化测试实例—Web登录功能性测试(无验证码)

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快

一、什么是自动化测试

把人为驱动的测试行为转化为机器执行的一种过程称为自动化测试。(来自百度百科)本质上来说,自动化测试对比起手工测试除了需要写代码外并没有什么不同,它们的不同在于在各自适合的场景不同,从而使它们能够在它们的场合发挥更大的优势。

二、什么情况不需要自动化测试

①需求变动频繁

②项目周期短

③自动化脚本一次性

等受时间(少)、技术(难度大)和重用性(低)因素影响的情况

三、自动化测试过程

上面说了很多概念性的东西,现在我引入一个实例来说明自动化测试的过程。现在有一个场景,我们需要测试一个网站的登录界面(简书的登录页面)。

首先需要写测试用例(如果有需求文档再写测试用例更好,这里的登录只做最简单的手机或邮箱、密码登录,其他如记住我,注册功能不测试)

组合有两个:

手机+密码,可以拓展成①手机已注册+密码正确,②手机已注册+密码不正确,③手机未注册+密码在数据库内,④手机未注册+密码不在数据库内,⑤手机号密码均为空,⑥手机号为空,⑦密码为空,⑧手机号密码都不空。其中手机号密码全部空的情况前面四种情况都可以验证。

邮箱+密码,可以拓展的几个方面与上面相同。所以写成的手工测试用例如下图(图片中所有数据均为虚拟数据,仅供参考)

然后我们可以把这个手工测试用例转变成自动测试用例,以上的用例都属于登录这个行为的,自动化测试的用例比手工测试的用例要更详细一点。 这里举两个例子

上面的自动化测试用例中有id(编号),feature(功能名称),scenario(场景名称),given(前置条件),when(操作步骤),then(预测结果),result(实际结果)这几个元素其中,given,when,then是所有用例的基本元素,在此基础上还可以扩展更多的元素如测试数据的覆盖率,测试结果的可靠性等等,这里的元素都是用到英文是为了方便使用某些测试框架的时候直接用,可以看到里面填入的内容对比起手工测试用例要更加详细更加脚本化。

经过用例设计评审后开始进行测试,因为这次是自动化测试,所以需要写脚本,验证脚本正确性,提交缺陷。如果把脚本和用例等写在测试框架里面会更有利于我们对这次测试的管理,不过自动化测试框架是一个需要展开的内容,所以留到下下次讲。

现在我们用一个现成的框架unittest

import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChainsclass testcase(unittest.TestCase):def setUp(self):print("test start")self.browser = webdriver.Chrome(r'D:\webdriver\chromedriver.exe')url = 'https://www.jianshu.com/sign_in'self.browser.get(url)input1 = self.browser.find_element_by_id('session_remember_me')selected = input1.is_selected()if selected:#判断勾选框是否勾选,把“记住我”勾选去掉input1.click()def test_Login_001(self):#必须要加test在前面不然不执行print("Login_001")self.browser.find_element_by_id('session_email_or_mobile_number').send_keys('18888888888')self.browser.find_element_by_id('session_password').send_keys('ABC111')self.browser.find_element_by_class_name('sign-in-button').click()time.sleep(30)try:hover_element = self.browser.find_element_by_class_name('user')#获取需要鼠标悬停才能显示下拉栏的元素classActionChains(self.browser).move_to_element(hover_element).perform()#鼠标移动到这个元素并悬停(在头像处悬停)time.sleep(3)self.browser.find_element_by_link_text('我的主页').click()#悬停后下拉栏选择“我的主页”result1 = self.browser.find_element_by_xpath("//a[@class='name']").textself.assertEqual(result1, '昵称')#只能是self.直接不能是self.browser.except Exception as e:print("error reason:s%" % e)raise etime.sleep(1)def test_Login_002(self):print("Login_001")self.browser.find_element_by_id('session_email_or_mobile_number').send_keys('18888888888')self.browser.find_element_by_id('session_password').send_keys('')self.browser.find_element_by_class_name('sign-in-button').click()time.sleep(8)try:result1 = self.browser.find_element_by_xpath("//span[@class='noty_text']").textself.assertEqual(result1, '手机号码/邮箱地址或密码不能为空')#只能是self.直接不能是self.browser.except Exception as e:print("error reason:s%" % e)raise etime.sleep(1)'''可以继续加入用例'''def tearDown(self):self.browser.quit()print('test gone')if __name__=="__main__":unittest.main()

上面的代码只写了两条用例,剩下也是按照这个思路写,很多的代码解释我也写作注释了。因为这一篇章我不考虑验证码的问题,所以这里处理验证码的方法是在按登录后等待手动操作接着获取结果,用断言assertEqual判断结果是否正确。

这里用了setup和teardown两种方法,这两种方法都是每个case运行前或运行后都会执行一次的。这里也可以用setupclass和teardownclass来替代,这两种方法是在所有case执行前或执行后用一次,如果在以上这个例子中用setupclass和teardownclass需要在每个case的结尾加上重置回登录页面的代码,所以setupclass和teardownclass更加适合流程递进的用例。

不过这里需要提一下最后的这里unittest.main(),可以看到在执行程序前,引入了unittest,最后这个入口也指向了unittest的main方法,我们来看一下用例是如何被实现的。

首先,打开python文件夹,如果没有改安装路径应该会在C盘(如C:\Python\Lib\unittest),打开main.py文件可以看到unittest.main()调用的是class TestProgram进入到init初始化testRunner、testLoader并根据用例模块即我们写的case创建测试集和执行它。简单来说就是unittest.main()其实是到了class TestProgram里面我们的case经过init方法初始化case需要进行的所有动作,parseArgs方法传入参数并赋值,createTests方法根据前一个方法的赋值创建测试集,runTests方法执行测试用例这四个步骤。

完成测试需要输出测试结果

import unittest
import HTMLTestRunner
import time
import testcasesuite=unittest.TestSuite()#创建测试集,也就是把所有的用例放在一起
ts=unittest.TestLoader()#加载测试suite.addTests(ts.loadTestsFromModule(testcase))#寻找模块名testcase的用例,把它加载并加入到测试集now=time.strftime("%Y-%m-%d_%H_%M_%S")
path="python_report"+now+".html"with open(path,"wb+") as f:runner=HTMLTestRunner.HTMLTestRunner(stream=f,verbosity=2,title='MathFunc Test Report',description='generated by HTMLTestRunner.')'''stream表示测试报告写入文件的存储区域,如stream=f表示以文件流的方式输出报告到open(path,"wb+")的路径verbosity=1的时候 默认值为1,不限制完整结果,即单个用例成功输出’.’,失败输出’F’,错误输出’E’=0的时候。不输出信息=2的时候,需要打印详细的返回信息title表示测试报告标题description表示测试报告描述'''runner.run(suite)#输出结果html

这里的HTMLTestRunner我是下载HTMLTestRunner.py再进行修改得到的 ,修改方法及下载网上可查,你也可以通过pip install html-testRunner的方法下载最新的HTMLTestRunner,方法同样网上可查展示效果如下:

用户指导手册

用户指导手册每个公司都会有模板按照模板来写就可以了。

四、在这个过程你可能会遇到的问题

1.下载webdriver与浏览器或者浏览器版本是否匹配

这一章,主要说了不需要验证码的自动化登录是如何执行的,下一章我们聊一下有验证码的情况应该如何做登录功能的自动化测试,下下一章我们再聊自动化测试框架。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

B站强推!建议所有想学自动化测试的,死磕这个视频,2024年字节最新内部教程,全程干货无废话!

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

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

相关文章

总结一下linux性能检测和调优手段

1.perf 是 Linux 系统中性能分析工具,用于收集性能相关的信息。它可以用于查看 CPU 使用情况、内存性能、磁盘 I/O 等,以帮助开发者找到性能瓶颈。 以下是一些 perf 常见用法和示例: 1. CPU Profiling a. 查看 CPU 使用率 perf stat -e cpu…

大数据职业技术培训包含哪些

技能提升认证考试,旨在通过优化整合涵盖学历教育、职业资格、技术水平和高新技术培训等各种教育培训资源,通过大数据行业政府引导,推进教育培训的社会化,开辟教育培训新途径,围绕大数据技术人才创新能力建设&#xff0…

百度交出2023年业绩答卷:全力提速AI布局,注入业绩增长新动能

2月28日,百度集团(HK:09888、NASDAQ:BIDU,下称“百度”)发布2023年第四季度及全年财报,交出了一份营收与利润双双跃升的答卷,展现出百度在巩固原有业绩护城河的基础上,投入AI大模型后释放出的巨…

vue2后台管理系统demo,包含增删查改、模糊搜索、分页

因一直敲小程序,vue不熟练,自己练手项目,就包含增删查改以及模糊搜索分页 一、页面简单但功能齐全 二、数据是mock模拟 三、启动步骤 1、 json-server --watch data.json 启动mock数据 2、npm i 下载依赖 3、npm run serve 四、github地址…

虚拟机部署Sentry步骤,国内地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

【YOLO v5 v7 v8 小目标改进】BiFormer:从局部空间特征到高效的全局空间特征

BiFormer:从局部空间特征到高效的全局空间特征 提出背景BiFormer 结构 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改 提出背景 论文:https://arxiv.org/pdf/2303.08810.pdf 代码:https://github.com/rayleizhu/BiFormer 问题: 传统的卷…

就业班 2401--3.1 Linux Day9--文件查找和压缩

一、文件查找与打包压缩 grep: 文件内容过滤 [rootqfedu.com ~]# grep root /etc/passwd #从/etc/passwd文件中过滤root字段 grep ^root root$ root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 查找命令 [rootqfedu.com ~]# which ls ali…

大屏自适应最优解决方案(transform:scale)

① 大屏使用rem 耗时 而且对浏览器最小字体不支持, ② 使用transform:scale可以节省百分之九十工作量 ③ 好处不多说:看一篇文章 学习一下 咱们再来实战! 优点:前期可以直接写页面,后期直接加上组件就行了,…

仿牛客网项目---帖子详情功能的实现

这篇文章主要讲讲帖子详情功能。其实帖子详情功能简单来说就是你点进去可以看到文章&#xff0c;这就叫帖子详情功能。那接下来我讲讲我的这个项目是如何实现这个功能的。 首先写DAO层。 Mapper public interface DiscussPostMapper {List<DiscussPost> selectDiscussPo…

【HbuilderX】 uniapp实现 android申请权限 和 退出app返回桌面

目录 android申请权限&#xff1a; 监听用户是否开启权限或关闭权限&#xff1a; 退出app返回桌面&#xff1a; android申请权限&#xff1a; 首先在 manifest.json 内添加你所需要用到权限 添加权限插件 permission.js 一次就好1/权限插件 - Gitee.comhttps://gitee.co…

element-plus表格合并

要实现这样的表格&#xff0c; 怎么做呢&#xff1f; 甚至是这种三级的呢&#xff1f; 官网的案例也是通过这个方法进行配置的&#xff0c;也就是说表格长什么样&#xff0c;关键在怎么处理的方法上。 这是官网的方法&#xff0c;可参考拓展&#xff1a; const arraySpanMeth…

rk3568 gamc0 控制器寄存器配置不了导致连接不上phy

系统启动 GMAC 的驱动开机 log 上出现打印&#xff1a;No PHY found 或者 Cannot attach to PHY。查阅rk 官方gmac 配置指导手册出现改问题的原因可能如下&#xff1a; 但反复检查硬件和软件发现都没问题。看内核启动日志发现gamc0 在启动过程中读取gmac0 的版本id是读取不到&a…