20行代码,用Python实现异常测试用例

接上篇文章~

一、注意

做大型项目的时候,用例是非常多的,所以.py文件的名字一定要根据模块来命名,否则就分不清了。

根据功能的复杂与简单,来决定要不要分成2个页面,例如1个页面只是个显示的功能,没有别的东西了,那就没有必要浪费时间再去整一个。如果初学者分不清,就按着自己的看法来。

一个测试用例=多个页面的多个功能串起来

调用多个页面类=同一个浏览器会话上面,串行执行完成的

立即学习“Python免费学习笔记(深入)”;

用例中没必要一定要写个assert,它就是个非常明显的断言。

实际上,我们可以用其它的方式来代替它。

PO模式的目的就是把页面的元素定位和元素操作跟测试用例分开。

分离彻底的目的就是各自维护各自的,各不相干。不至于元素定位一发生变化,就在测试用例中到处去找。

例如这种错误的方式:

代码语言:javascript代码运行次数:0运行复制

 def test_login_success(self):        #步骤  输入用户名:XXx 密码XXX 点击登陆        self.lg.login('18684720553','python')        #断言  首页当中-能否找到  退出  这个元素        #等待10秒 元素有没有出现 //a[@href="/Index/logout.html"]        WebDriverWait(self.driver,20).until(EC.visibility_of_element_located((By.XPATH,'//a[@href="/Index/logout.html"]')))
20行代码,用Python实现异常测试用例

有些用例中的断言肯定是不止一条的,可能涉及的元素定位有1个以上。每一个测试用例都有元素的断言,也就意味着每条用例中都可能有元素定位方式。

如果某一个元素的定位方式发生变化,你能保证200个定位中没有重复的这种元素定位吗?

能保证某一个元素发生了变化,测试用例不需要同步修改吗?

所以这种做法是不可取的,后期维护的时候工作量非常的大。

做项目,写框架要看整体项目层面的,不能现在写的爽,以后苦。

从登陆页跳转过来,没有那么快出现,所以加上10秒时间缓冲。

步骤是一样的,断言的方式都是一样的,只是参数不一样而已,那你就可以用ddt。

二、代码

来自文件index_page.py

代码小浣熊 代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 51 查看详情 代码小浣熊 代码语言:javascript代码运行次数:0运行复制

from selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byclass IndexPage:    def __init__(self,driver):        self.driver=driver    def isExist_logout_ele(self):        # 等待10秒 元素有没有出现 //a[@href="/Index/logout.html"]        #如果存在就返回True,不存在就返回False        try:            WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//a[@href="/Index/logout.html"]')))            return True        except:            return False

来自文件login_page.py

代码语言:javascript代码运行次数:0运行复制

from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byclass LoginPage:    def __init__(self,driver):        self.driver=driver    #登陆    def login(self,username,passwd,remember_user=True):        #输入用户名        #输入密码        #点击登陆        name_text='//input[@name="phone"]'        pwd_text='//input[@name="password"]'        login_but='//button[text()="登录"]'        WebDriverWait(self.driver,20).until(EC.visibility_of_element_located((By.XPATH,name_text)))        self.driver.find_element_by_xpath(name_text).send_keys(username)        self.driver.find_element_by_xpath(pwd_text).send_keys(passwd)       #判断一下rember_user的值,来决定是否勾选        self.driver.find_element_by_xpath(login_but).click()    #注册    def register_enter(self):        WebDriverWait(self.driver,20).until(EC.visibility_of_element_located((By.XPATH,"")))        self.driver.find_element_by_xpath("").click()    #获取错误提示信息-登录区域    def get_errorMsg_from_loginArea(self):        WebDriverWait(self.driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,'//div[@class="form-error-info"]')))        return self.driver.find_element_by_xpath('//div[@class="form-error-info"]').text    #忘记密码

来自文件test_login.py

代码语言:javascript代码运行次数:0运行复制

import  unittestfrom selenium import webdriverfrom PageObjects.login_page import LoginPagefrom PageObjects.index_page import IndexPagefrom TestDatas import Common_Datas as CDfrom TestDatas import login_datas as LDimport ddt@ddt.ddtclass TestLogin(unittest.TestCase):    # def setUpClass(cls):    #     #通过excel读取本功能当中需要的所有测试数据    #     pass    def setUp(self):        # 前置  访问登陆页面        self.driver=webdriver.Chrome()        self.driver.get(CD.web_login_url)        self.lg=LoginPage(self.driver)    def tearDown(self):        #后置        self.driver.quit()    # 正常用例-登陆成功    def test_login_success(self):        #步骤  输入用户名:XXx 密码XXX 点击登陆        self.lg.login(LD.success_data["user"],LD.success_data["passwd"])        #断言  首页当中-能否找到  退出  这个元素        self.assertTrue(IndexPage(self.driver).isExist_logout_ele())    #    #异常用例 -手机号格式不正确(大于11位、小于11位、为空、不在号码段)  ddt    @ddt.data(*LD.phone_data)    def test_login_user_wrongFormat(self,data):        # 步骤  输入用户名:XXx 密码XXX 点击登陆        self.lg.login(data["user"],data["passwd"])        # 断言  登陆页面 提示:请输入正确的手机号        #登录页面中 -获取提示框的文本内容        #比对文本内容与期望的值是否相等        self.assertEqual(self.lg.get_errorMsg_from_loginArea(),data["check"])    # def test_login_wrongData    # #异常用例 - 用户名为空    # def test_login_noUser(self):    #     self.lg.login('', 'python')    # # 步骤  输入用户名:XXx 密码XXX 点击登陆    # # 断言  登陆页面 提示:请输入手机号    #     pass#异常用例-未注册手机号#异常用例-错误的密码#异常用例-不输入密码

来自文件Common_Datas.py

代码语言:javascript代码运行次数:0运行复制

#全局-系统访问地址-登录链接web_login_url="http://120.78.128.25:8765/Index/login.html"

来自文件login_datas.py

代码语言:javascript代码运行次数:0运行复制

#正常场景-测试数据success_data={"user":"18684720553","passwd":"python"}#异常用例-手机号格式不正确(大于11位、小于11位、为空、不在号码段)phone_data=[{"user":"18684720","passwd":"python","check":"请输入正确的手机号"},{"user":"18684720553123","passwd":"python","check":"请输入正确的手机号"},{"user":"","passwd":"python","check":"请输入手机号"},{"user":"11684720553","passwd":"python","check":"请输入正确的手机号"}]#异常用例# layui-layer-content 此账号没有经过授权,请联系管理员! //div[@class="layui-layer-content"]

文件结构目录如图:

20行代码,用Python实现异常测试用例

三、问题整理

1.像这样的测试用例,运行一次是不够的,在实际工作过程中调试这样的用例,连续运行3-5次不会出错,都是在我的预期当中,那就ok,暂时可以放下去写别的测试用例了。

如果运行3-5次运行不成功,那就先把它调试成功,再去做其它的测试用例。

要求稳定性。 这种用例需要在很多地方都要调试的。不同的电脑运行起来的效果不同,可能本机是成功的,但是放到别的电脑上就挂了。这是Web自动化比较常见的现象。

考验系统的稳定性,有时候系统的性能不好、网速比较慢或者系统有bug等等,很多环境因素会影响结果。所以要想办法提升自己代码的健壮性。

所以元素之前该写等待的地方还是要等。主要提高自己代码的稳定性。

测试用例=测试对象调用+测试数据

2.同一套代码在Mac和Windows上运行有差异吗?

跨平台,如果都是谷歌浏览器,本质上都是一样的,但是电脑的环境不一样可能会导致某些地方运行失败。大部分东西都是一样的,不需要去改,只要先去运行一下,有没有失败的,失败的原因是什么,分析下原因就行了。

跨平台:Linux、Mac、Windows都支持。驱动程序换下就好了,其它都一样。

3.怎么定位界面这个3秒就闪过的提示呢?

20行代码,用Python实现异常测试用例
20行代码,用Python实现异常测试用例

实在搞不定,就去抱开发哥哥大腿,哈哈。

未完待续~

以上就是20行代码,用Python实现异常测试用例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/390417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
uc浏览器操作手势怎么设置 uc浏览器操作手势设置教程
上一篇 2025年11月6日 15:35:00
石墨文档如何设置团队角色权限_石墨文档组织架构的管理
下一篇 2025年11月6日 15:35:05

相关推荐

  • WPS怎么办批量打印文件_WPS多文档批量打印与队列管理步骤

    使用WPS内置批量打印功能,通过工具→批量处理→批量打印添加文件并设置参数后一键打印;2. 在资源管理器中多选文件右键以WPS打开,再在文件菜单中选择打印所有文档;3. 通过控制面板的设备和打印机进入打印队列,可实时监控、暂停或取消任务,确保批量打印过程稳定可控。 如果您需要在短时间内处理多个WPS…

    2026年9月24日
    400
  • Intel OpenCAS缓存加速方案

    open cas 架构概览:数据从hdd盘读取后被复制到open cas的缓存中,后续的读取操作从内存中进行,从而提高读写效率。在write-through模式下,所有数据同步刷新到open cas的ssd和后端的hdd中。在write-back模式下,数据同步写入到open cas的ssd中,然后…

    2026年9月24日
    400
  • windows8如何取消开机密码_windows8取消开机密码的操作

    1、通过netplwiz取消密码验证并设置自动登录;2、在控制面板中更改密码为空实现无密码开机;3、使用命令提示符执行net user命令清除账户密码,三者均可实现Windows 8.1启动时跳过密码输入。 如果您希望在启动Windows 8系统时跳过手动输入密码的步骤,可以直接通过系统内置工具配置…

    2026年9月24日
    000
  • Java中固定长度用户ID输入验证:解决int类型长度检查问题

    本文详细介绍了在Java程序中如何实现用户输入固定长度ID的验证机制。针对常见的int cannot be dereferenced错误,我们将探讨将ID作为字符串读取并进行长度及格式校验的最佳实践,并提供处理字母数字型和纯数字型ID的示例代码,确保数据输入的准确性和程序的健壮性。 引言:用户输入验…

    2026年9月24日
    500
  • 手机qq浏览器阅读模式怎么退出_手机QQ浏览器退出阅读模式操作方法

    要退出手机QQ浏览器的阅读模式,首先点击页面顶部的“阅读模式已开启”按钮即可立即退出;若无明显开关,可刷新页面或长按刷新强制重新加载;也可通过右上角“更多”菜单选择“退出阅读模式”;为避免再次进入,可在设置中关闭“自动进入阅读模式”功能。 如果您在使用手机QQ浏览器时进入了阅读模式,但希望恢复到原始…

    2026年9月24日
    200
  • 数据实时迁移同步工具 CloudCanal v5.2.0.0 发布,支持 SaaS 全托管

    cloudcanal 免费社区版 是 clougence 公司推出的一款全自研、可视化、自动化数据迁移同步工具,具备 结构迁移、数据迁移、数据同步、数据校验、数据订正 等功能,支持 60+ 款流行关系型数据库、实时数仓、消息中间件、缓存数据库和搜索引擎之间数据互通,其中包含国产数据库 oceanba…

    2026年9月24日
    000
  • VSCode如何实现AI代码反混淆 VSCode智能分析混淆代码的技巧

    vscode没有一键ai反混淆功能,但可通过智能扩展、调试器、ast查看器、代码格式化工具及外部ai工具集成来辅助分析和逐步还原混淆代码;2. 利用eslint、prettier等扩展提升代码可读性,通过“重命名符号”“转到定义”“查找引用”等功能追踪变量和函数流向,结合多光标编辑和代码片段进行手动…

    2026年9月24日
    100
  • Laravel 表单验证失败后保留输入值:最佳实践教程

    本文旨在帮助 Laravel 开发者解决表单验证失败后,如何保留用户已输入数据的问题。我们将深入探讨 withInput() 方法的使用,并提供清晰的代码示例,确保即使在验证失败的情况下,用户体验也能保持流畅。通过本文的学习,你将掌握在 Laravel 中优雅地处理表单验证,并提升应用的可用性。 在…

    2026年9月24日
    000
  • 电脑网络连接限制为100Mbps怎么办_网速被限制的解决方法

    首先确认网卡是否支持千兆速率,进入设备管理器查看网络适配器型号并核实规格;接着在网卡属性中将“速度和双工”设置为1.0 Gbps全双工或自动协商;更换符合Cat 5e及以上标准的网线,确保物理连接可靠;检查路由器或交换机端口设置,确保未强制限制为100Mbps;更新或重装网卡驱动程序至最新版本;最后…

    2026年9月24日
    100
  • 如何通过日志排查权限问题

    排查权限问题需从日志入手,重点分析时间、用户、资源路径、拒绝原因及调用堆栈。首先检查应用日志中“用户无权访问”等提示,结合Web服务器日志中的403/401状态码定位请求异常;再查看操作系统日志如/var/log/secure中SSH或sudo拒绝记录,确认系统级权限问题;同时审查中间件如Sprin…

    2026年9月24日
    100
  • win10软件不兼容怎么办_win10软件兼容性处理方法

    首先使用兼容性疑难解答工具检测并修复问题,若无效则手动设置兼容模式为Windows 7或8,同时安装必要的Visual C++和.NET运行库,更新显卡等驱动程序,并尝试以管理员身份运行程序。 如果您尝试在Windows 10系统上运行某个软件,但出现“此应用无法在你的电脑上运行”或程序闪退等错误提…

    2026年9月24日
    000
  • 生成Java中全范围正Double随机数的正确方法

    本文旨在指导开发者如何在Java中生成覆盖整个正Double范围的随机数,并解释了使用ThreadLocalRandom.nextDouble(Double.MIN_VALUE, Double.MAX_VALUE)可能产生偏差的原因。我们将提供一种基于位操作的替代方案,确保生成的随机数在Double…

    2026年9月24日
    100
  • hive安装配置实验

    一、安装前的准备工作 1. 配置并安装hadoop,请参考链接http://blog.csdn.net/wzy0623/article/details/50681554。 2. 下载以下安装包:mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz、apache-hive…

    2026年9月24日
    600
  • 动态表单输入中多答案数据处理教程

    本教程旨在解决Web开发中,如何高效处理包含动态数量答案的表单提交数据,特别是当需要更新现有问题及其关联答案时。文章将详细阐述前端表单的命名策略以及后端PHP如何解析这些动态输入,以准确获取答案内容及其对应的数据库ID,从而实现数据的精准更新,并提供最佳实践建议。 理解动态答案更新的挑战 在构建问答…

    2026年9月24日
    000
  • 大学论文怎么写?让AI工具助你一臂之力

    大学论文怎么写?让AI工具助你一臂之力大学论文怎么写?让AI工具助你一臂之力大学论文怎么写?让AI工具助你一臂之力大学论文怎么写?让AI工具助你一臂之力

    如果要选出大学学习过程中最令人头疼的事,写论文无疑能稳居榜首。从选题开题、内容撰写,到翻译润色、查重降重,每个步骤都耗时耗力,让人焦头烂额。然而,随着 ai 技术的发展,如今写论文这件事,已经可以借助智能工具变得更高效、更轻松。 开题太难?AI 来帮你破局! 论文的第一道难关就是开题。面对浩如烟海的…

    2026年9月24日 用户投稿
    100
  • Java Stream API:从嵌套集合中提取唯一值的两种高效方法

    本文详细介绍了如何利用Java Stream API中的flatMap()和mapMulti()操作,高效地从包含嵌套列表的复杂数据结构(如List中包含List)中提取并收集唯一的元素(如城市名称),替代传统的嵌套循环,提升代码的简洁性和可读性。 在java编程中,我们经常会遇到处理复杂数据结构的…

    2026年9月24日
    100
  • VSCode 怎样配置终端默认路径 VSCode 终端默认路径的配置技巧​

    在 vscode 中配置终端默认启动路径需修改 terminal.integrated.cwd 设置项;2. 可通过用户设置(全局生效)或工作区设置(项目专属)进行配置,优先级为工作区设置覆盖用户设置;3. 路径可使用绝对路径或相对路径(推荐相对路径以提升协作性),windows 系统需注意反斜杠转…

    2026年9月24日
    000
  • 使用 PHP 解析 JSON 文件并在网页上显示特定数据

    本文旨在帮助开发者学习如何使用 PHP 解析 JSON 文件,并提取其中的特定数据,将其以结构化的方式展示在网页上。我们将通过一个简单的示例,演示如何读取 JSON 数据,解析成 PHP 数组,并最终以 HTML 表格的形式呈现。 PHP 解析 JSON 数据 JSON (JavaScript Ob…

    2026年9月24日
    100
  • 《Python完全自学教程》免费在线连载1.5

    《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5《Python完全自学教程》免费在线连载1.5

    说明: 本节内容,是针对非计算机专业的读者提供的补充知识。 1.5 操作系统 本节不是全面介绍操作系统知识,是提醒读者从开发者的角度认识自己的操作系统——根据多年的经验,至少要能熟练使用一些命令完成常见操作。 首先要声明硬件设备,本书所演示的代码都是基于个人计算机( Personal Compute…

    2026年9月24日 用户投稿
    700
  • 探索VSCode Jupyter Notebook集成与扩展

    VSCode集成Jupyter Notebook提升开发效率,安装Jupyter扩展后可直接运行.ipynb文件,支持内核选择、Shift+Enter执行单元格、图表渲染及变量状态保留;结合Python扩展、Pylance、GitLens等工具,实现调试、智能提示、版本控制与代码转换,适合数据分析与…

    2026年9月24日
    000

发表回复

登录后才能评论
关注微信