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

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. CF 1133C Balanced Team

    题目链接:http://codeforces.com/problemset/problem/1133/C 题目分析 (个人感受:我看错了题目,硬是写了近一个小时!) 这个题目要求一个最长的序列,使得这 ...

  2. QQ登陆

    QQ第三方登陆调用接口实现 <?php $appid="101353491"; session_start(); $appkey="df4e46ba7da52f78 ...

  3. JavaEE--JavaWeb三大组件Servlet、Filter、Listener

    Servlet.Filter.Listener是JavaEE Web服务规定的服务器动态组件,由开发者编写由Web容器创建,并保证单例以及线程安全性,其中加载顺序为Linstener -> Fl ...

  4. ARC 100 C - Linear Approximation题解---三分法

    题目链接: https://arc100.contest.atcoder.jp/tasks/arc100_a 分析: 比赛时做这题想到一个瞎搞的方法就是在平均数上下波动一下取最小值,然后大佬yjw学长 ...

  5. Linux经典操作

    1.Linux批量终止在运行中包含某个字符串的所有进程. ps -ef|grep celery | grep -v grep|cut -c 9-15|xargs kill -9

  6. JVM--对象访问和OutOfMemoryError异常

        对象访问: 使用句柄访问方式: 使用直接指针访问方式: OutOfMemoryError异常: 设置堆的最小最大容量:-Xms20m -Xmx20m 设置一样推不可自动扩展. 设置出现内存溢出 ...

  7. Spring整合Hessian访问远程服务

    声明:该文章转载自Spring整合Hessian访问远程服务,本人搬过来只是为了记录下学习Hessian的过程,忘此博主理解,在此感谢,等本人有能力了再学一些原创的东东,本人实践了下,hessianS ...

  8. 在vs上开发linux c++

    https://www.cnblogs.com/xylc/p/6533716.html?&from=androidqq https://www.jianshu.com/p/8b51a795cb ...

  9. mysql 5.5.36 通用二进制安装部署

    1.创建mysql用户 # useradd -r mysql 2.解压二进制包到指定目录下 # tar xf mysql-5.5.36-linux2.6-x86_64.tar.gz -C /usr/l ...

  10. Centos7 初始化

    systemctl disable firewalld sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config grubby - ...