在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了。

unittest提供了一些跳过指定用例的方法

  • @unittest.skip(reason):强制跳转。reason是跳转原因
  • @unittest.skipIf(condition, reason):condition为True的时候跳转
  • @unittest.skipUnless(condition, reason):condition为False的时候跳转
  • @unittest.expectedFailure:如果test失败了,这个test不计入失败的case数目
# coding = utf-8
import unittest
import warnings
from selenium import webdriver
from time import sleep
# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\IEDriverServer.exe' class CmsLoginTest(unittest.TestCase):
def setUp(self):
# 这行代码的作用是忽略一些告警打印
warnings.simplefilter("ignore", ResourceWarning)
self.driver = webdriver.Ie(executable_path=driverfile_path)
self.driver.get("http://172.21.13.83:28080/") def tearDown(self):
self.driver.quit() @unittest.skip("用户名密码都为空用例不执行")
def test_login1(self):
'''用户名、密码为空'''
self.driver.find_element_by_css_selector("#imageField").click()
error_message1 = self.driver.find_element_by_css_selector("[for='loginName']").text
error_message2 = self.driver.find_element_by_css_selector("[for='textfield']").text
self.assertEqual(error_message1, '用户名不能为空')
self.assertEqual(error_message2, '密码不能为空') @unittest.skipIf(3 > 2, "3大于2,此用例不执行")
def test_login3(self):
'''用户名、密码正确'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest")
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("")
self.driver.find_element_by_css_selector("#imageField").click()
sleep(1)
self.driver.switch_to.frame("topFrame")
username = self.driver.find_element_by_css_selector("#nav_top>ul>li>a").text
self.assertEqual(username,"autotest") @unittest.skipUnless(3 < 2,"2没有大于3,此用例不执行")
def test_login2(self):
'''用户名正确,密码错误'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest")
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("")
self.driver.find_element_by_css_selector("#imageField").click()
error_message = self.driver.find_element_by_css_selector(".errorMessage").text
self.assertEqual(error_message, '密码错误,请重新输入!') @unittest.expectedFailure
def test_login4(self):
'''用户名不存在'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("test007")
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("")
self.driver.find_element_by_css_selector("#imageField").click()
error_message = self.driver.find_element_by_css_selector(".errorMessage").text
self.assertEqual(error_message, '用户名不存在!') def test_login5(self):
'''用户名为空'''
self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("")
self.driver.find_element_by_css_selector("#imageField").click()
error_message = self.driver.find_element_by_css_selector("[for='loginName']").text
self.assertEqual(error_message, '用户不存在!') def test_login6(self):
'''密码为空'''
self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest")
self.driver.find_element_by_css_selector("#imageField").click()
error_message = self.driver.find_element_by_css_selector("[for='textfield']").text
self.assertEqual(error_message, '密码不能为空') if __name__ == "__main__":
unittest.main(verbosity=2)

执行结果:

"C:\Program Files\Python36\python.exe" D:/Git/Test_Framework/utils/cmslogin.py
test_login1 (__main__.CmsLoginTest)
用户名、密码为空 ... skipped '用户名密码都为空用例不执行'
test_login2 (__main__.CmsLoginTest)
用户名正确,密码错误 ... skipped '2没有大于3,此用例不执行'
test_login3 (__main__.CmsLoginTest)
用户名、密码正确 ... skipped '3大于2,此用例不执行'
test_login4 (__main__.CmsLoginTest)
用户名不存在 ... expected failure
test_login5 (__main__.CmsLoginTest)
用户名为空 ... FAIL
test_login6 (__main__.CmsLoginTest)
密码为空 ... ok ======================================================================
FAIL: test_login5 (__main__.CmsLoginTest)
用户名为空
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:/Git/Test_Framework/utils/cmslogin.py", line 71, in test_login5
self.assertEqual(error_message, '用户不存在!')
AssertionError: '用户名不能为空' != '用户不存在!'
- 用户名不能为空
+ 用户不存在! ----------------------------------------------------------------------
Ran 6 tests in 32.663s FAILED (failures=1, skipped=3, expected failures=1) Process finished with exit code 1

unittest详解(二) 跳过用例的执行(skip)的更多相关文章

  1. unittest详解 跳过用例的执行(skip)

    在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...

  2. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  3. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

  4. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  5. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  6. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  7. logback -- 配置详解 -- 二 -- <appender>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  8. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  9. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

随机推荐

  1. mysql5.6 多实例标准化安装

    1.检查防火墙 是否关闭service iptables stopchkconfig iptables offservice iptables status 2. SELINUXvim /etc/se ...

  2. typescript中类型断言好理解也好用

    类型断言是个好用的玩意,虽然typescript很强大,但是有时还不如我们知道一个值的类型,导致在开发过程中总是报一些令人头痛的类型错误.使用断言,简单来说就是先做好一个假设,使得编译通过. 我一开始 ...

  3. Max History CodeForces - 938E (组合计数)

    You are given an array a of length n. We define fa the following way: Initially fa = 0, M = 1; for e ...

  4. C++ 二阶构造模式

    1.如何判断构造函数的执行结果? 构造函数没有返回值,所以不能通过返回值来判断是构造函数是否构造成功. 如果给构造函数强行加入一个返回值,用来表示是否构造成功.这样确实能够反映出构造的结果,但是不够优 ...

  5. jQuery选择器引入

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. JS中的事件传播流程

    JS中的事件传播流程 1,Javascript与HTML之间的交互是通过事件实现的. 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 可以使用侦听器来预定事件,以便事件发生时执行相应代码. 2 ...

  7. SQL-Serverの自動採番(IDENTITY値)の取得・リセット

    システムに必要なテーブルで.自動的に番号を振っていくものが必要なときがあります. たとえば.各種の伝票データの伝票番号の様なものです. プログラム処理上.データを登録した直後に.自動採番された値を取得 ...

  8. LeetCode——回文链表

    题目 给定一个链表的头节点head,请判断该链表是否为回 文结构. 例如: 1->2->1,返回true. 1->2->2->1,返回true. 15->6-> ...

  9. NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法

    1.错误提示内容 2.ant脚本对应的内容 <?xml version="1.0" encoding="UTF-8"?> <!-- ===== ...

  10. 11、Nginx反向代理服务

    1Nginx代理服务基本概述 1.代理一词并不陌生, 该服务我们常常用到如(代理理财.代理租房.代理收货等等),如下图所示 2.在没有代理模式的情况下,客户端和Nginx服务端,都是客户端直接请求服务 ...