我们在操作自动化测如何实现用例设计实例

在编写用例之间,笔者再次强调几点编写自动化测试用例的原则:

1、一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器。
2、一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统
3、尽量只做功能中正向逻辑的验证,不要考虑太多逆向逻辑的验证,逆向逻辑的情况很多(例如手号输错有很多种情况),验证一方面比较复杂,需要编写大量的脚本,另一方面自动化脚本本身比较脆弱,很多非正常的逻辑的验证能力不强。(我们尽量遵循用户正常使用原则编写脚本即可)
4、脚本之间不要产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。
5、如果对数据进行了修改,需要对数据进行还原。
6、在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。

一、登陆用例实例:

笔者建议通过excle 表格来编写自动化测试用例。
用例001:

代码示例:

备注:通过匹配用户登录之后的昵称来判断用户是否登录成功。
用例脚本(login.py):

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import timedriver = webdriver.Firefox()
driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud.kuaibo.com%2F")
driver.maximize_window() #浏览器最大化#登陆快播私有云
driver.find_element_by_id("user_name").send_keys("testing360")
driver.find_element_by_id("user_pwd").send_keys("198876")
driver.find_element_by_id("dl_an_submit").click()
time.sleep(3)#获取用户名
now_user=driver.find_element_by_xpath("//div[@id='Nav']/ul/li[4]/a[1]/span").text#用户名是否等于虫师,不等于将抛出异常
if now_user==u'虫师':print '登陆成功'
else:raise NameError('user name error!')#退出
driver.find_element_by_class_name("Usertool").click()
time.sleep(2)
driver.find_element_by_link_text("退出").click()
time.sleep(2)
driver.close()

二、添加文件用例实例

用例002:

 备注:通过计算用户列表中的文件的数量来判断文件是否添加成功。

用例脚本(collect.py):

注:用例登陆与退出参考用例001,本用例只关注收藏用户分享的逻辑代码。#判断当前文件个数

inputs=driver.find_elements_by_tag_name('input')
n=0
for i in inputs:if i.get_attribute('type')=="checkbox":n=n+1
print u"当前列表文件为%d" %n#收藏用户分享文件
driver.find_element_by_class_name("collect").click()
time.sleep(3)#再次获取当前文件的个数
inputs=driver.find_elements_by_tag_name('input')
ns=0
for ii in inputs:if ii.get_attribute('type')=="checkbox":ns=ns+1
print u"当前列表文件为%d" %ns#判断执行收藏文件之后比收藏之间文件加1 ,否则抛异常
if  ns==n+1:print "ok!"
else:raise NameError('添加文件失败!!')

三、删除文件实例:

用例003:

备注:因为删除了一个文件对文件的数据发生的改变,如果多次执行脚本,列表中的文件被删除完了就会引发异常,所以在删除一个文件后,需要再添加一文件,但添加文件操作不做验证。
用例脚本(del_one_file.py):#判断当前文件个数

inputs=driver.find_elements_by_tag_name('input')
n=0
for i in inputs:if i.get_attribute('type')=="checkbox":n=n+1
print u"当前列表文件为%d" %n#删除操作
driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[4]/table/tbody/tr/td/input").click()
driver.find_element_by_class_name("dele").click()
driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div").click()
time.sleep(4)#再次获取当前文件的个数
inputs=driver.find_elements_by_tag_name('input')
ns=0
for ii in inputs:if ii.get_attribute('type')=="checkbox":ns=ns+1
print u"当前列表文件为%d" %ns#判断执行删除单个文件之后比删除之后文件减1 ,否则抛异常
if  ns==n-1:print "ok!"
else:raise NameError('删除文件失败!!')
#收藏用户分享单个文件driver.find_element_by_class_name("collect").click()
time.sleep(3)

四、重命名文件用例实例

用例004:

备注:文件的重命名其实我们很难找到证据(验证点)证明重命名成功,那么脚本整个运行没有报错,我们也可模糊的判断功能测试是OK 的。


用例脚本(renaming.py)

#勾选重命名的文件
driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[4]/table/tbody[5]/tr/td/input").click()
time.sleep(3)#鼠标移动到“更多”按钮弹下拉框element=driver.find_element_by_class_name("more-fe")     #定位到“更多”按钮
ActionChains(driver).move_to_element(element).perform()   #鼠标移动到“更多”按钮弹下拉框
time.sleep(2)   #在li 标签(更多下拉框)中筛选到data-action==rename(重命名)选项点击lis=driver.find_elements_by_tag_name('li')
for li in lis:if li.get_attribute('data-action') == 'rename':li.click()
time.sleep(2)在input 标签中筛选type==text 的重命名输入框inputs=driver.find_elements_by_tag_name('input')
for input in inputs:if input.get_attribute('type') == 'text':input.send_keys(u"新文件名") #进行重名操作input.send_keys(Keys.ENTER) #回车确认重命名time.sleep(2)

总结:
在本章中,简单对比了手工测试用户与自动化测试用例的区别,自动化测试用例编写的原则,如何通过python 捕捉异常和抛出异常,以及webdriver 提供的get_screenshot_as_file()函数,以及如何编写自动化用例与脚本等。

不过笔者先不要急于开始实施自动化测试,虽然我们可以编写单个的测试用例,并通过异常捕捉判断用例是否运行成功。但只有与通过测试框架的整合,我们才能真正有效可行的运用自动化测试技术。

如何还有啥不懂得建议观看下视频

【2023最新】Python自动化测试,7天练完60个实战项目,全程干货。【自动化测试/接口测试/性能测试/软件测试】

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

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

写代码生成流程图

我们在写文档,博客的时候,一般都会使用markdown语法,最常见的就是一些github开源项目的README。有时候会去画一些流程图,例如使用process.on或者xmind等第三方网站,然后截图插入到文档中。 今天我们介绍一种使用代码直…

亚马逊美国站自行车电动自行车儿童自行车的合规认证GCC+UL2849

GCC合规性认证16CFR1512和 UL 2849 随着道路变得更加拥挤,停车位的减少,骑自行车上班已成为一种不错的选择。它不仅为骑手提供体育锻炼,还为骑手提供了更为灵活的通勤,因此更加轻便的电动助力自行车应运而生。需求不断增长&…

网络电视盒子哪个品牌好?测评工作室深入分析电视盒子排名

电视盒子只需要联网就可以收看海量资源,不需要每月缴费,玩游戏、上网课、K歌都不在话下,对新手来说电视盒子如何选择?网络电视盒子哪个品牌好?工作室购入了最热销的15款电视盒子经过多角度对比后整理了电视盒子排名&am…

【JUC系列-08】深入理解CyclicBarrier底层原理和基本使用

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

FOXBORO P0926PA输入输出模块

FOXBORO P0926PA 是一种输入输出(I/O)模块,通常用于工业自动化和控制系统中,其主要功能是连接和控制各种传感器、执行器和设备,以实现数据采集、监测和控制。以下是该输入输出模块的一些可能特点和功能: 多…

急救车工业路由器应用提升急救效率:车联网、数据采集与远程诊疗

急救车作为医院里医疗急救过程中的重要组成部分,在智慧医疗物联网领域中急救车应用4G工业路由器实现网络部署与数据采集,通过工业4G路由器能够实时采集到病患的生理数据、救护现场音频与视频、GPS定位以及车辆运行状态等重要信息。这些数据将被传输到医疗…

【操作系统笔记八】任务调度信号处理CPU上下文

任务调度 何时需要调度执行一个任务? 第一:当任务创建的时候,需要决定是继续执行父进程,还是调度执行子进程 第二:在一个任务退出时,需要做出调度决策,需要从 TASK_RUNNING 状态的所有任务中选…

双节前的最后一篇,给艰难度过2023的你

今天是2023年中秋和国情前的假期最后的一篇,中秋和国庆将不进行任何更新,同时此篇也是给2023年还在努力活着的你,你可能是工作了一年没有时间休息的人,你可能是正在疯狂投简历找工作中的你,你可能是在这个大大世界寻找…

c++ | makefile | 编译 | 链接库

简单记一下 看着人家总结的挺好的 点这

c#用Gnuplot画图源码

直接调用这个类即可&#xff0c;需要下载个GnuPlot安装下。 // Author: Leonardo Tazziniusing System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Windows.Forms;/// <summary> /// Tested with Gnuplot 5.2 /// </summary&g…

stm32学习笔记:OLED显示屏

一、OLED简介 OLED:有机发光二极管&#xff0c;供电∶3~5.5V&#xff0c;通信协议︰I2C/SPI&#xff0c;分辨率∶12864 二、常用的调试方式 串口调试∶通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试∶直接将显示屏连接…

Stm32_标准库_GPIOA初始化

代码&#xff1a; #include "stm32f10x.h" // Device headerGPIO_InitTypeDef GPIO_InitStructur;//定义变量结构体int main(void){/*使用RCC开启GPIO的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟/*使用GPIO_I…

VC++判断程序是否已经运行;仅运行一次

VC判断程序是否已经运行&#xff1b;仅运行一次 BOOL CClientApp::InitInstance() {...//判断程序是否已经运行&#xff1b;仅运行一次CreateMutex(NULL,true,_T("xxxxx")); //xxxxx&#xff1a;为程序标识码if(GetLastError()ERROR_ALREADY_EXISTS) { AfxMess…

Windows Server 2012 R2 安装 .NET Framework 4.6.1

服务器操作系统是 Windows Server 2012 R2 版本&#xff0c;在安装 .NET Framework 4.6.1 过程中出现报错&#xff0c;报错截图如下&#xff1a; 通过上报报错可以发现是缺少对应的 KB2919355 更新&#xff0c;只有安装了此依赖才能在 Windows 8.1 或 Windows Server 2012 R2 …

Django Web开发入门基础

官方有很详细的文档&#xff0c;但是看过几遍之后如果要翻找还是有点麻烦&#xff0c;本文算作是学习笔记&#xff0c;提取一些关键点记录下来&#xff0c;另附上官方教程 编写你的第一个 Django 应用 注&#xff1a; 文中的指令使用py&#xff0c;是在Windows上&#xff0c;ma…

LIMS实验室信息管理系统源码 基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体

LIMS 是一个集现代化管理思想与基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体&#xff0c;以实验室业务和管理工作为核心&#xff0c;遵循实验室管理国际规范&#xff0c;实现对实验室全方位管理的信息管理系统。 LIMS将样品管理、数据管理…

JDK1.8新特性

JDK1.8新特性 &#x1f353;IDE环境调整&#x1f353;lambda表达式&#x1f352;代码实现&#x1f352;常用内置函数式接口 &#x1f353;接口新增方法&#x1f353;Stream流&#x1f352;reduce终结&#x1f352;并行流 &#x1f353;IDE环境调整 &#x1f353;lambda表达式 ⭐…

基于SSM+Vue的医院住院综合服务管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

17.适配器模式(Adapter)

意图&#xff1a;将一个类的接口转换为Client希望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类在一起工作。 UML图 Target&#xff1a;定义Client使用的与特定领域相关的接口。 Client&#xff1a;与符合Target接口的对象协同工作。 Adaptee&#xf…

一文了解“期刊”、“JCR分区”、“中科院分区”

本篇文章是博主在知识拓展学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在知识拓展笔记专栏&#xff1a;…