今天开始批量执行用例~,场景是这样的:

工作中我们可能有多个模块文件(.py)这些文件根据不同的业务类型或功能,测试案例分布在不同的模块文件下。前面的小示例中,我们的测试用例都是在一个文件中,直接运行的测试套件~,开发阶段或者调试阶段这样做是没毛病的,但是如果是测试运行阶段,我们不可能这个模块文件下的用例执行完毕后,切换另一个模块中的用例继续执行。所以我们需要用的批量执行多个模块文件的测试用例。

首先第一个用例模块的案例是这样的~

 import unittest               #导入unittest库
from selenium import webdriver #导入自动化测试selenium中的webdriver class baidu_test_1(unittest.TestCase): #写一个baidu_test_1 类,继承unittest中的TestCase类 @classmethod #方便我们直接调用,不需要实例化类的对象直接调用
def setUp(cls): #所有案例执行前,都先执行该方法,初始化
cls.driver = webdriver.Chrome() #实例化一个webdriver对象
cls.driver.maximize_window() #最大化浏览器窗口
cls.driver.implicitly_wait(15) #页面加载慢的情况,我们设置等待时长15秒
cls.driver.get(r'http://www.baidu.com') #打开百度的首页 @classmethod
def tearDown(cls): #所有案例执行后,执行该方法
cls.driver.quit() #关闭浏览器 '''测试用例'''
def test_baidu_lianjie(self): #百度链接测试的用例
'''百度首页:测试新闻链接,跳转后的链接地址是否正确'''
self.driver.find_element_by_link_text('新闻').click() #点击新闻链接后,获取新闻链接:self.driver.current_url
self.assertEqual(self.driver.current_url,'http://news.baidu.com/') #用获取到的链接,和实际链接做对比,看是不是相等 '''if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;
当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。'''
if __name__ == '__main__':
unittest.main(verbosity=2)

接下来是第二个用例模块的代码:

 import unittest
from selenium import webdriver class baidu_test_2(unittest.TestCase):
@classmethod
def setUp(cls):
cls.driver=webdriver.Chrome()
cls.driver.maximize_window()
cls.driver.implicitly_wait(15)
cls.driver.get(r'http://www.baidu.com') @classmethod
def tearDown(cls):
cls.driver.quit() def test_baidu_enabled(self):
so=self.driver.find_element_by_id('kw') #检查元素是否可编辑用is_enabled(),可以编辑返回的是True
self.assertTrue(so.is_enabled()) #如果返回的是True,那么就是真真为真~通过 def test_baidu_sousuo(self):
so = self.driver.find_element_by_id('kw')
so.send_keys('你好中国') #上面的代码选择了输入框,这是输入:send_keys()
self.driver.find_element_by_id('su').click() #该方法是模拟点击操作click()
print(so.get_attribute('value')) #根据属性获取表单中的值get_attribute('value')
self.assertEqual(so.get_attribute('value'),'你好中国') #我们用获取到的值,和我们预期的值做对比,看是否相等 if __name__ == '__main__':
unittest.main(verbosity=2)

注意:测试模块的名称,前面需要统一,看图:两个测试用例模块文件的名字前面都是test_  开头

接下来就是最后一个模块文件的代码,批量执行用例模块中的代码:

 import unittest    #导入unittest
import os #导入前面学习的os库,方便获取文件路径 def allTests():
suite=unittest.TestLoader().discover( #实例化测试套件
start_dir=os.path.dirname(__file__), #start_dir=该参数是discover()方法中的,后面的参数是需要批量执行的用例模块路径
pattern='test_*.py', #pattern=该参数是discover()方法中的,后面的参数是所有需要执行的用例前面是test_,后半部分用*号代替的.py文件
top_level_dir=None) #top_level_dir=该参数是discover()方法中的,固定格式:top_level_dir=None
return suite #记住返回测试套件 def run(): #运行
unittest.TextTestRunner(verbosity=2).run(allTests()) #测试报告 if __name__ == '__main__':
run()

批量执行就是这样的~~~~

总结:

1、 #检查元素是否可编辑用is_enabled(),可以编辑返回的是True,否则是Flase
2、在编辑框中输入内容用:send_keys()
3、点击按钮的操作可以用:click()
4、根据属性获取表单中的值get_attribute('value') 比如搜索中的内容
5、获取当前页面的url链接地址: driver.current_url 来判断我们跳转的页面是否正确
6、批量执行用例用到的unitest库中的TestLoader()类,该类中的discover(start_dir, pattern=’test*.py’, top_level_dir=None)方法 discover中可以看出有三个参数:以下是百度给大家的轮子~~~自行学习
start_dir :要测试的模块名或测试用例目录。
pattern='test*.py' :表示用例文件名的匹配原则。星号“*”表示任意多个字符。(test*.py是以test开头)
top_level_dir=None:测试模块的顶层目录。如果没顶层目录(也就是说测试用例不是放在多级目录中),默认为 None。
原文链接:https://blog.csdn.net/weixin_40569991/article/details/81155145
-------------来自自学的总结,希望对大家有帮助,不会的朋友可以留言,一起进步~~~~~秋天来了,注意季节转换,容易生病~~~~~~贴秋膘

python+unittest框架第四天unittest之批量执行案例的更多相关文章

  1. python+unittest框架第四天unittest之断言(一)

    unittest中的测试断言分两天总结,hhh其实内容不多,就是懒~ 断言的作用是什么?  答:设置测试断言以后,能帮助我们判断测试用例执行结果. 我们先看下unittest支持的断言有哪些: 对上面 ...

  2. python+unittest框架第三天unittest之分离测试固件和公共代码,跳过案例的执行

    我们在时间工作中,会将整个项目的代码分别放置多个模块中去编写.方便后期项目维护,比如,我们的web项目可能有多个IP地址,每个IP地址代表不同的测试环境.测试环境与Bat环境或者验收环境等.这就需要我 ...

  3. python接口自动化(二十六)--批量执行用例 discover(详解)

    简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...

  4. Python 中使用 ddt 来进行数据驱动,批量执行用例,修改ddt代码

    1. 什么是数据驱动? 使用数据驱动有什么好处? 用例执行是靠数据来驱动的,每条测试用例除了测试数据不一样意外,所有的用例代码都是一样的,为了使用例批量执行,我们会使用数据驱动的思想来批量执行测试用例 ...

  5. pycharm 右键无法显示unittest框架&&解决右键只有unittest 运行如何取消右键显示进行普通run

    上面是普通文件和unittest 导入的文件右键快捷键显示情况,可以看出两者快捷键都是ctr+shift+F10,如果你是右键模式想运行unitest,但是又不知道哪里配置unittest直接运行快捷 ...

  6. unittest框架(三)unittest+yaml数据驱动

    学习完了如何用yaml文件管理用例,如何进行单元测试,如何产生漂亮的测试报告,那么结合这几点,我们简单学习下unittest+yaml数据驱动来测试. 第一步:首先,我们建一个yaml文件,管理用例, ...

  7. Python测试框架unittest

    Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...

  8. Python单元测试框架unittest之深入学习

    前言 前几篇文章该要地介绍了python单元测试框架unittest的使用,本篇文章系统介绍unittest框架. 一.unittest核心工作原理 unittest中最核心的四个概念是:test c ...

  9. selenium-webdriver(python) (十六) --unittest 框架

    学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...

随机推荐

  1. 前端基于vue,后台采用springboot+shiro的方式搭建的一个移动端商品展示平台

    基于vue实现的移动端商品展示页,可以web-view的方式嵌入到小程序中,布局简约.大气,减少初学者或开发者不必要的工作量.后台维护采用的springboot+shiro的方式,为广大爱好者提供展示 ...

  2. 带新手玩转MVC——不讲道理就是干(下)

    带新手玩转MVC——不讲道理就是干(下) 前言:废话不多说,直接开干 完整案例演示 案例代码 LoginServlet package servlet; import domain.User; imp ...

  3. Java IO 为什么我们需要缓冲区

    在执行IO操作我们通常会设置一个字节数组作为缓冲区用来写/读数据,一般情况下一个合理大小的缓冲区是有利于提升性能的,但是有一个问题一直困扰着我,为什么缓冲区可以提升IO操作的性能? 经查阅资料之后,总 ...

  4. GoLang fsnotify 实现目录中日志文件大小监控

    需求: 需要监听一个目录中所有文件,当文件大小增加到一定阀值,则将文件清空. 需要引入第三方包:"github.com/howeyc/fsnotify" 代码如下: package ...

  5. Java实现常见的排序算法

    一.排序算法 常见的排序算法主要分为下面几类: 选择排序 堆排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 桶式排序 基数排序 本文主要介绍选择排序.堆排序.冒泡排序.快速排序和归并排序的原理 ...

  6. Codeforces Round #192 (Div. 2) (330B) B.Road Construction

    题意: 要在N个城市之间修建道路,使得任意两个城市都可以到达,而且不超过两条路,还有,有些城市之间是不能修建道路的. 思路: 要将N个城市全部相连,刚开始以为是最小生成树的问题,其实就是一道简单的题目 ...

  7. 再记一次经典Net程序的逆向过程

    1.前言 上次发完,有网友问了一个问题:如果不绕过编译,而是直接编译怎么办? 记一次Net软件逆向的过程:https://www.cnblogs.com/dotnetcrazy/p/10142315. ...

  8. Java中Timer和TimerTask来实现计时器循环触发

    package xian; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.Fi ...

  9. JDK的命令行工具系列 (二) javap、jinfo、jmap

    javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出publ ...

  10. 有趣的RPC理解

    RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通 ...