0

0

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

星夢妙者

星夢妙者

发布时间:2025-09-01 09:22:22

|

966人浏览过

|

来源于php中文网

原创

接上篇文章~

一、注意

做大型项目的时候,用例是非常多的,所以.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

Flash ActionScript3 高级教程 pdf版
Flash ActionScript3 高级教程 pdf版

Flash ActionScript3 高级教程 pdf,书籍部分目录:      第一章 高级   碰撞检测   不规则图形的检测碰撞   BitmapData.hitTest用于非位图   大量对象的碰撞检测   实现基于网格的碰撞检测   编写网格代码   测试并调整网格   使用此类   检测不只是为了碰撞      第二章 转向   行为   2D向量(Vector2D)类   机车(Vehicle)类   转向机车(SteeredVehicle)类   寻找行为   避开行为   到达行为  

下载
代码语言: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实现异常测试用例

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

未完待续~


相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

769

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

659

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1325

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

710

2023.08.11

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 11.2万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号