unittest框架结构

test_case:

测试套件,每一个.py文件代表一个测试用例,测试用例以test开头,否则框架读取不到测试用例

__init__.py是做什么的?

要弄明白这个问题,首先要知道,python 在执行 import 语句时,到底进行了什么操作,按照 python 的文档,它执行了如下操作:
第 1 步,创建一个新的,空的 module 对象(它可能包含多个 module);
第 2 步,把这个 module 对象插入 sys.module 中
第 3 步,装载 module 的代码(如果需要,首先必须编译)
第 4 步,执行新的 module 中对应的代码。
在执行第 3 步时,首先要找到 module 程序所在的位置,搜索的顺序是:
当前路径 (以及从当前目录指定的 sys.path),然后是 PYTHONPATH,然后是 python 的安装设置相关的默认路径。
正因为存在这样的顺序,如果当前路径或 PYTHONPATH 中存在与标准 module 同样的 module,则会覆盖标准 module。也就是说,如果当前目录下存在 xml.py,那么执行 import xml 时,导入的是当前目录下的 module,而不是系统标准的 xml。了解了这些,我们就可以先构建一个 package,以普通 module 的方式导入,就可以直接访问此 package中的各个 module 了。python 中的 package 必须包含一个__init__.py 的文件

public:存放测试用例所调用的公共模块

data:存放用于参数化的数据

report:存放测试报告

all_tests.py:执行test_case中的测试用例

qq邮箱登录测试用例:

 1 #encoding:utf-8
2 from selenium import webdriver
3 import time
4
5 import unittest
6 from selenium.common.exceptions import NoSuchElementException
7
8 class Login(unittest.TestCase):
9 def setUp(self):
10 self.driver = webdriver.Chrome()
11 self.driver.get("https://mail.qq.com/")
12 self.driver.maximize_window()
13 def test_login(self):
14 #先跳转到frame框架
15 self.driver.switch_to.frame('login_frame')
16 time.sleep(3)
17 #self.driver.find_element_by_css_selector("#qqLoginCard").click()
18 self.driver.find_element_by_id('u').send_keys('******@qq.com')
19 self.driver.find_element_by_id("p").send_keys('******')
20 self.driver.find_element_by_id("login_button").click()
21 time.sleep(10)
22
23 #try:
24 # text = self.driver.find_element_by_id('useralias').text
25 # print(text)
26 # return True
27 #except:
28 # return False
29
30 def tearDown(self):
31 self.driver.quit()
32
33
34 if __name__ == '__main__':
35 unittest.main

all_test.py

 1 #encoding:utf-8
2 import unittest
3 import HTMLTestRunner
4 import os,time
5 listaa = 'D:\\unittest\\test_case' #测试用例所在目录
6 def creatsuite1():
7 testunit = unittest.TestSuite()
8 discover = unittest.defaultTestLoader.discover( #用discover读取测试用例
9 listaa,
10 pattern='*.py',
11 top_level_dir=None
12 )
13 for test_suite in discover:
14 for test_case in test_suite:
15 testunit.addTests(test_case)
16 print(testunit)
17 return testunit
18
19 alltestnames = creatsuite1()
20
21 now = time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime())#获取当前时间并设置时间格式
22 filename = "D:\\unittest\\test_case\\report"+now + "result.html" #将测试报告存到本地
23
24 fp = open(filename,'wb')
25
26 runner = HTMLTestRunner.HTMLTestRunner( #设置测试报告格式
27 stream=fp,
28 title= u'qq登录测试报告',
29 description=u'用例执行情况'
30 )
31
32 runner.run(alltestnames)#运行测试用例并生成测试报告

unittest 测试用例实现的更多相关文章

  1. unittest测试用例的执行顺序

    unittest的测试顺序为:有几个测试用例,测试固件就会执行多少次. 例如:只有一个测试用例时: setup--testcase1--teardown import unittest class F ...

  2. appium+python+unittest 测试用例的几种加载执行方式

    利用python进行测试时,测试用例的加载方式有2种: 一种是通过unittest.main()来启动所需测试的测试模块:  一种是添加到testsuite集合中再加载所有的被测试对象,而testsu ...

  3. Django 测试开发5 unittest测试用例

    Django测试用例 Django默认Python的标准库unittest编写测试用例.Django的单元测试类django.test.TestCase 从unittest.TestCase继承而来. ...

  4. PyCharm上unittest 测试用例两种执行方式

    每次讲到unittest测试框架的时候,经常有同学在群里反映,为啥我的运行不是按照我往suite里添加的用例顺序执行的,为什么别人的能跑出来报告,我的就不行... 当然,首先确认代码是OK的,如果代码 ...

  5. python -- unittest测试用例函数无法传参的处理方法(ddt)

    1.超继承 重写测试用例类的init方法,如下所示. import requests import unittest class XiaoheiCases(unittest.TestCase): de ...

  6. 一文带你定制unittest测试用例的名称

    在之前的文章中,我在之前的文章中提到过,这里呢,考虑后,感觉之前的写法不够优雅,于是乎呢,我自己抽空去研究了下,主要是新写方法,这样呢,以后的要使用的时候,可以直接去使用,而不是每次换个环境就要修改环 ...

  7. 【Python + Selenium】之unittest测试用例满足条件,进行跳过测试Skip

    直接上代码: __author__ = 'zc' import unittest class demoSkipTest(unittest.TestCase): a = 70 b = 50 print( ...

  8. unittest框架官方翻译:中文版

    指数 模块 | 下一个 | 上一个 | Python » 英语 法国 日本 朝鲜的   开发(3.8) 3.7.3rc1 3.6 3.5 2.7  文档 » Python标准库 » 开发工具 » | ...

  9. python接口自动化测试 - unittest框架基本使用

    unittest简单介绍 单元测试框架 还可以适用WEB自动化测试用例的开发与执行 提供丰富的断言方法 官方文档:https://docs.python.org/zh-cn/3/library/uni ...

随机推荐

  1. Linux CentOS 搭建SVN并用钩子自动实现同步到Web目录

    linux安装配置SVN并设置钩子   安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 # ...

  2. 怎么说服领导,能让我用DDD架构肝项目?

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/ezd-6xkRiNfPH1lGwhLd8Q 沉淀.分享.成长,让自己和他人都能 ...

  3. JAVA8学习——深入浅出方法引用(学习过程)

    方法引用:method reference 先简单的看一下哪里用到了方法引用: public class MethodReferenceTest { public static void main(S ...

  4. SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统

      一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈.查找定位系统问题.上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需要对日志数据进行 ...

  5. 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  6. 提权辅助工具:Windows--exploit-suggester.py安装及使用

    下载地址    https://github.com/AonCyberLabs/Windows-Exploit-Suggester1.安装xlrd包(注意python2.3版本的pip问题)      ...

  7. ctf linux 基本命令

    从网站上下载一个tar.gz的安装包,在linux下解压缩. 获得一个flag的二进制文件. 通过linux的grep命令搜索到key. grep命令参数中文说明

  8. 在Linux发行版上使用7zip的方法

    学习如何在 Ubuntu 和其他 Linux 发行版中安装和使用 7zip 7zip介绍 7Zip(更适当的写法是 7-Zip)是一种在 Windows 用户中广泛流行的归档格式.一个 7Zip 归档 ...

  9. WPF中使用MVVM进行multibinding

    背景描述:在Number1和Number2文本框中输入数字后,在Answer文本框中会按照下图所示显示. xaml代码: <Window.Resources> <local:MyVa ...

  10. Hbase的namespace命令操作

    一.什么是namespace 在RDBMS中有database的概念,用来对table进行分组,那么在HBase中当表比较多的时候如何对表分组呢,就是namespace,可以简单的把namespace ...