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. SpringBoot自定义classloader加密保护class文件

    背景 最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密 ...

  2. python控制浏览器上传文件

    自动化爬虫方法和库很多,难点大多数在登录.可以大致分为:普通验证码,扫码登录,QQ一键登录,拖动验证,无痕验证,人工识别(比如12306登录) 万能大法可以破解一切以上需求,自动控制浏览器行为 参考文 ...

  3. Spring系列22:Spring AOP 概念与快速入门篇

    本文内容 Spring AOP含义和目标 AOP相关概念 声明式AOP快速入门 编程式创建代理对象 Spring AOP含义和目标 OOP: Object-oriented Programming 面 ...

  4. 将Android手机无线连接到Ubuntu实现唱跳Rap

    您想要将Android设备连接到Ubuntu以传输文件.查看Android通知.以及从Ubuntu桌面发送短信 – 你会怎么做?将文件从手机传输到PC时不要打电话给自己:使用GSConnect就可以. ...

  5. 【C# IO 操作】 文件系统侦听 FileSystemWatcher

    侦听器 :FileSystemWatcher FileSystemWatcher常用属性有: Filter :获取或设置用于确定目录中要监视哪些文件的过滤器字符串.Filter 属性设置为空字符串 ( ...

  6. 【C#基础概念】命名规范

    1. 引言 本文是一套面向C# programmer 和C# developer 进行开发所应遵循的开发规范. 按照此规范来开发C#程序可带来以下益处: ·         代码的编写保持一致性, · ...

  7. js websocket断线重连

    js websocket断开重连实例代码,请根据自己需求做出相应改动Vue中使用websocket $(function() { var lockReconnect = false;//避免重复连接 ...

  8. LeetCode-011-盛最多水的容器

    盛最多水的容器 题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, ...

  9. vue用ElementUI导出Excel表格

    import axios from 'axios'; import qs from 'qs'; import { message } from 'element-ui';   export const ...

  10. SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

    针对anchor-point检测算法的优化问题,论文提出了SAPD方法,对不同位置的anchor point使用不同的损失权重,并且对不同的特征金字塔层进行加权共同训练,去除了大部分人为制定的规则,更 ...