web自动化测试实战之批量执行测试用例
01实战之分离测试固件
在UI 自动化测试中,不管编写哪个模块的测试用例,都需要首先在测试类中编写测试固件初始化WebDriver类及打开浏览器,执行登录,才能进行下一步业务逻辑的操作,测试用例执行完成后还需要关闭浏览器,这部分的代码如下:
import unittest
from selenium import webdriver
import time, os class InitTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
#print('start!进入初始化环境')
cls.dr = webdriver.Chrome()
cls.dr.maximize_window()
#print('测试浏览器为:{0}'.format(cls.dr.name))
time.sleep(1)
ulr1 = 'http://*******.****.com.cn' @classmethod
def tearDownclass(cls):
cls.dr.quit()
在每一个测试类中都要编写以上代码,因此需要重复编写很多代码。是否可以把测试固件这部分代码分离出去,测试类直接继承分离出去的类呢?我们把测试固件分离到项目中,新建文件名称为 public_XF_login.py 类名为:InitTest
import unittest
from selenium import webdriver
import time, os class InitTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
#print('start!进入初始化环境')
cls.dr = webdriver.Chrome()
cls.dr.maximize_window()
#print('测试浏览器为:{0}'.format(cls.dr.name))
time.sleep(1)
ulr1 = 'http://********.com.cn'
#(u'访问测试环境后台管理系统')
cls.dr.get(ulr1)
#print('测试地址为:{0}'.format(cls.dr.current_url))
time.sleep(1)
xpath = cls.dr.find_element_by_xpath
#点击账号登录,输入用户名+密码
xpath('//*[@id="app"]/div/div[2]/div[2]/div/div[1]/div').click()
time.sleep(1)
# 捕捉账号文本栏,进行输入账号
xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/input').send_keys(u'********')
time.sleep(1)
# 捕捉密码文本栏,进行输入密码
xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[2]/input').send_keys(u'*******')
time.sleep(1)
#点击登录
xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[3]/input').click() @classmethod
def tearDownclass(cls):
cls.dr.quit()
from test_python.public_XF_login import InitTest 在需要引用该类的文件先进行引用该类,测试类进行继承InitTest,继承后,在测试类中直接编写要执行的测试用例,例如(该2条case是小编实际项目的自动化代码,各位可以也拿)case001_验证登录是否成功,代码如下:
# -*-coding=utf-*-
import time
import unittest
from test_python.public_XF_login import InitTest class Admin(InitTest):
def testCase_001(cls):
'''验证用户是否登录成功'''
cls.assertEqual('http://********.com.cn/#/', cls.dr.current_url)
time.sleep(1)
cls.dr.quit() if __name__ == '__main__':
unittest.main(verbosity=2)
from test_python.public_XF_login import InitTest 在需要引用该类的文件先进行引用该类,测试类进行继承 InitTest,继承后,在测试类中直接编写要执行的测试用例,例如case002_验证登录是否成功,代码如下:
# coding=utf-8
import time
import unittest
from test_python.public_XF_login import InitTest class Admin(InitTest):
def testCase_002(cls):
'''进入门店评分报表页面_验证门店查看明细功能'''
xpath = cls.dr.find_element_by_xpath
time.sleep(2)
#进入门店评分报表页面
xpath('/html/body/section/section/aside/ul/li[3]/span').click()
time.sleep(1)
#刷新门店评分报表页
cls.dr.refresh()
time.sleep(5)
#点击列表第一页,第五行门店的查看按钮,进入评分信息详情'
xpath('/html/body/section/section/section/main/div[2]/div/div/div[2]/div[2]/div[1]/div[3]/table/tbody/tr[5]/td[10]/div/button/span').click()
#断言门店详情页面制定元素是否展示的为神秘访客 判断页面是否成功跳转到详情页
text = xpath('/html/body/section/section/section/main/div[2]/div/div/div[2]/div[2]/div/div[1]/div[1]/p[1]').text
cls.assertEqual(u'神秘顾客', text)
time.sleep(1)
cls.dr.quit()
#Case_002执行完毕关闭浏览器 if __name__ == '__main__':
unittest.main(verbosity=2)
注解:首先需要导入public_XF_login.py 模块中的InitTest类,测试类 Admin 继承InitTest类。这样执行测试类后,会先执行setUpClass方法,再执行具体的测试用例,最后执行 tearDownclass 方法。python 的类继承的方式解决了在每个测试类中都需要编写测试固件的问题。把测试固件分离出去后,即使后期测试地址发生变化,只需要修改public_XF_login.py 模块中InitTest类中的 url地址即可,而不需要在每个测试类修改测试地址,减少了编写重复性代码的开销。分离了测试固件,运行以上代码,对应的测试用例执行通过。
02实战之批量执行测试用例
在实际测试中,常常需要批量执行测试用例。例如,在testCase 包中有 case001_login.py 和 case002_Score_report.py 两个文件,下面批量执行这两个模块的测试用例。创建新文件 test_case_suite.py,在 test_case_suite.py文件中编写批量执行的代码,测试用例的代码跟上面文件中的一致,目录大概如下


接着我们在创建 AllTest.py 我们来看看如何进行调用全部的测试用例,如下代码就可以实现
#-*-coding=utf-8-*-
import unittest
import os def AllTest():
'''获取所有的测试模块'''
suite=unittest.TestLoader().discover(
start_dir=os.path.dirname('F:\\python3\\python_code\\test_case_suite'),
pattern='case*.py',
top_level_dir=None)
return suite if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(AllTest())
注解:在以上代码中,批量获取测试模块用到的方法是 discover。discover方法有三个参数,第一个参数 start_dir是测试模块的路径,存放在testCase包中;第二个参数pattern用来获取testCase包中所有以test开头的模块文件,会获取到test_baidu.py和test_sina.py;第三个参数 top_level_dir 在调用的时候直接给默认值None。我们执行 AllTest.py 文件执行代码如下,这就是批量化执行case.

后面我会在基于这集中测试方法上,补充一些可优化的点,最近工作比较繁忙,会抽空给大家分享好文,持续分享持续输出,希望本文对你们会有所帮助。本文参考Python自动化测试实战(作者:无涯),感谢前人的教程学学他人的知识点,一步一步变为自己的知识点,也可以从中衍生新的测试思想与方法。
web自动化测试实战之批量执行测试用例的更多相关文章
- web自动化测试实战之生成测试报告
同志们,老铁们,继上篇文章 web自动化测试实战之批量执行测试用例 之后我们接着继续往下走,有人说我们运行了所有测试用例,控制台输入的结果,如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错 ...
- 使用python进行接口自动化测试,批量执行测试用例
工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...
- selenium之批量执行测试用例
把写好的测试用例放在指定目录下,使用discover函数扫描该目录,并根据关键字自动筛选需要执行的用例.本例使用Python3.6版本. # 遍历指定目录,批量执行测试用例 import unitte ...
- unittest批量执行测试用例
现有四个测试用例分别在两个.py文件中,如何执行这些文件? unittest中有这样处理:unittest.TestLoader().discover() 第一个文件test_case1.py fro ...
- JAVA 批量执行测试用例
如果多个测试用例在不同的类中,又需要一次性执行完所有的测试用例,则可以使用到Junit中的批量执行测试方法. 方法一 这种方式非常简单,不需要额外多写一行代码,Eclipse 本来就支持以项目或包为单 ...
- postman使用--批量执行测试用例和数据驱动
批量执行 在我们测试接口的时候,有时候希望执行所有的测试用例,前面讲的都是测试单个的接口,postman提供了我们批量执行接口的功能 点击Runner 然后我们点击run 执行完会统计出我们的结果,失 ...
- Appium+Python之批量执行测试用例
思考:当存在多个脚本,每个脚本中有多条测试用例时,我们该如何批量执行呢?分析:首先创建2个测试用例脚本(.py文件),每个脚本有2条测试用例,然后批量执行全部测试用例 #Test_01.py # co ...
- python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集
由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...
- .NET项目web自动化测试实战——Selenium 2.0
PS:这次用公司的项目来练手,希望公司不会起诉我,因为我绝对是抱着学习的态度,没有任何恶意.仅供交流学习. 该项目是基于SharePoint平台所开发的门户网站,为了切身感受一下Selenium 2. ...
随机推荐
- 【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!
写在前面 在[String注解驱动开发专题]中,前面的文章我们主要讲了有关于如何向Spring容器中注册bean的知识,大家可以到[String注解驱动开发专题]中系统学习.接下来,我们继续肝Spri ...
- 多语言工作者の十日冲刺<6/10>
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第六天(05.05) 作业正文 ...
- WebGPU+光线追踪Ray Tracing 开发三个月总结
大家好~这三个月以来,我一直在学习和实现"基于WebGPU的混合光线追踪实时渲染"的技术,使用了Ray Tracing管线(如.rgen..rmiss等着色器). 现在与大家分享和 ...
- offer到手!美团Java岗四面(多线程+redis+JVM+数据库)
美团Java岗四面,已拿offer,前三面都是技术面,第四面是HR面,下面是面试题! 美团Java岗一面(技术,电话面,约40分钟) 自我介绍. 项目介绍. 了解过redis源码及redis集群么? ...
- SerializableClob转String
ORACLE数据库读取CLOB字段,JAVA中获取到类型为SerializableClob,如何转换成String类型那? 以下是代码示例: SerializableClob sc = ...
- nginx 注释配置及详解
前言 DMZ(Demilitarized Zone) 非军事区,生产环境 WEB 服务部署的区域,公司的架构为一台nginx 充当 load balance 服务,负载到两台 nginx 上面,反向代 ...
- MVC+EFCore 项目实战-数仓管理系统1
项目背景及需求说明 这是一个数据管理"工具类"的系统,计划有三个核心功能: 1.通过界面配置相关连接字符串,查询数据库的表数据. 2.配置相关模板,生成数据库表. 可以界面填报或通 ...
- USACO 2020 OPEN Silver Problem 3. The Moo Particle
题意: 解法: 首先给出在本题中连通和连通块的定义: 连通: 两个粒子a,b连通,当且仅当ax≤bx.ay≤by或者bx≤ax.by≤ay. 如图,A,B两粒子是连通的,而C.D不是. 可以看出,本题 ...
- 113资讯网:安装程序进入Admin后台出现:SQLSTATE[HY000] [1045] Access denied for user'root'@'localhost' (using password: YES)
各项设置设置正确,就是出现这种原因! 1.config.inc.php解决办法: 修改phpMyAdmin的配置文件里的密码设置,进入phpMyAdmin的安装目录,找到config.inc.php配 ...
- 基于ASP.NET core的MVC站点开发笔记 0x01
基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...