unittest

Python编程从入门到实践第十一章-测试代码

一曲冷凌霜 提交于 2020-02-12 17:52:21
11-1 def get_formatted_name(city,country): '''函数返回一个格式为City, Country 的字符串''' full_name = city + country return full_name.title() import unittest from city_functions import get_formatted_name class CityCountryTestCase(unittest.TestCase): def test_city_country(self): formatted_name =get_formatted_name('santiago ', 'chile') self.assertEqual(formatted_name,'Santiago Chile') unittest.main() 11-2 def get_formatted_name(city,country,population=''): full_name = city + country + '-population' + str(population) return full_name.title() import unittest from city_functions import get_formatted_name class

verbosity

本秂侑毒 提交于 2020-02-10 18:51:13
由结果可以总结,verbosity有3种的错误信息状态提示报告: 0,静默模式,对于测试结果给予简单提示。 1,默认模式,与静默模式类似,只是在每个成功的用例前面有个 . 每个失败的用例前面有个 F ,跳过的用例有个 S 。 2,详细模式,测试结果会显示每个用例的所有相关的信息。 切记,只有 0、1、2 三种状态。 默认的是1。 import unittestclass MyTestCase(unittest.TestCase): def case_01(self): self.assertTrue('FOO'.isupper()) # 'FOO'.isupper() --> True def case_02(self): self.assertTrue('Foo'.isupper()) def case_03(self): self.assertTrue('bar'.islower()) def test_case_01(self): self.assertEqual(1, 1) def test_case_02(self): self.assertEqual(1, 0)if __name__ == '__main__': # 创建容器并且同时将用例添加到容器中 suite = unittest.makeSuite(testCaseClass=MyTestCase) #

makeSuite(自动挡)

南笙酒味 提交于 2020-02-10 18:42:14
makeSuite执行顺序: 创建容器对象,并且将用例添加到容器中 找个 人 去执行容器中的用例,这个 人 我们称为 执行器 makeSuite容器有两种方式添加用例: suite.addTest(用例对象),每次往容器中添加一个 suite.addTests([用例对象1, 用例对象2, ......]),一次添加多个用例 suite.countTestCases(),输出当前容器中有多少用例 注意:有的同学可能在写unittest.makeSuite的时候,点不出来 makeSuite ,不要怕,生写就完了,千万不要怕飘黄。 import unittestclass MyTestCase(unittest.TestCase): def case_01(self): self.assertTrue('FOO'.isupper()) # 'FOO'.isupper() --> True def case_02(self): self.assertTrue('Foo'.isupper()) def case_03(self): self.assertTrue('bar'.islower()) def test_case_01(self): self.assertEqual(1, 1) def test_case_02(self): self.assertEqual(1, 0)if _

setupClass和teardownClass

China☆狼群 提交于 2020-02-10 18:41:58
场景: 在测试类中,有多个测试用例,在每一个测试用例执行前后,要做一些操作。 另外,还有在测试类中,所有用例执行之前要做一些初始化的操作,在所有用例执行之后,要做一的收尾的操作。 import unittestclass MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): print('在所有用例执行之前做的操作') @classmethod def tearDownClass(cls): print('在所有的用例执行之后做的操作') def setUp(self): print('在用例执行之前做的操作') def tearDown(self): print('在用例执行之后做的操作') def test_case_01(self): self.assertTrue('FOO'.isupper()) # 'FOO'.isupper() --> True def test_case_02(self): self.assertTrue('FOO'.isupper()) def test_case_03(self): self.assertTrue('bar'.islower())if __name__ == '__main__': suite = unittest.makeSuite

TestLoader

谁说我不能喝 提交于 2020-02-10 18:37:18
该discover方法接收三个参数: start_dir:要测试的模块名或者测试用例的目录。 pattern="test*.py":表示用例文件名的匹配原则,默认匹配以 test 开头的文件名,星号表示后续的多个字符。 top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。 注意!!!意!! discover对给定的目录是有要求的,它只 识别Python的包,也就是目录内有 init .py文件的才算是Python的包,只要是要读取的目录,都必须是包 。 关于start_dir和top_level_dir的几种情况: start_dir目录可以单独指定,这个时候,让top_level_dir保持默认(None)即可。 start_dir == top_level_dir, start_dir目录与top_level_dir目录一致,discover寻找start_dir指定目录内的符合规则的模块。 start_dir < top_level_dir,start_dir目录是top_level_dir目录的子目录。discover寻找start_dir指定目录内的符合规则的模块。 start_dir > top_level_dir,start_dir目录如果大于top_level_dir目录,等待你的是报错 AssertionError:

3.runTest内部原理.py

。_饼干妹妹 提交于 2020-02-10 17:31:04
import requestsimport unittestclass MyTestCase(unittest.TestCase): ''' 类名可以自定义 但必须继承 unittest.TestCase 在测试用例执行之前 要做一些事情或者进行一些初始化的操作 在测试用例执行之后,做一些收尾的操作 ''' def setUp(self): """ 在测试用例执行之前执行的方法 """ self.response = requests.get(url='http://www.neeo.cc:6002/pinter/com/getSku?id=1') print("在测试用例执行之前触发我执行", self.response.json()) def tearDown(self): """ 在测试用例执行之后执行的方法 """ print("在测试用例执行之后触发我执行") del self.response def aaa(self): """ runTest就是测试用例 """ if self.response.json()['message'] == "success": print('用例通过') else: print('用例执行失败')class MyTestCase2(unittest.TestCase): ''' 类名可以自定义 但必须继承 unittest

pageObject+unittest+selenium实现UI自动化测试

自闭症网瘾萝莉.ら 提交于 2020-02-05 08:40:04
1.为什么要使用pageObject设计模式 Page Object 模式是selenium自动化测试项目开发最佳测试设计模式,主要体现在对界面交互细节的封装,这样使得测试案例更加注重页面而不是界面细节。从而提高测试用例的可读性;减少了代码的重复;提高测试用例的可维护性,特别是针对UI频繁变动的项目。 2.设计思想 Page Object模式主要是将每个页面设计为一个类class,这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法。 3.如何使用:例如登录qq邮箱的web页面 3.1.定义页面基础类,用于所有页面的基础,封装所有测试页面的公共方法。 #coding=utf-8 from selenium import webdriver from selenium . webdriver . common . by import By from time import sleep class BasePage ( object ) : def __init__ ( self , driver ) : self . base_url = 'https://mail.qq.com/' self . driver = driver def _open ( self ) : url = self . base_url self . driver . get (

Python3 标准库概览

让人想犯罪 __ 提交于 2020-02-04 11:11:49
操作系统接口 os模块提供了不少与操作系统相关联的函数。 >>> import os >>> os.getcwd() # 返回当前的工作目录 'C:\\Python34' >>> os.chdir('/server/accesslogs') # 修改当前的工作目录 >>> os.system('mkdir today') # 执行系统命令 mkdir 0 建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。 在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用: >>> import os >>> dir(os) <returns a list of all module functions> >>> help(os) <returns an extensive manual page created from the module's docstrings> 针对日常的文件和目录管理任务,:mod:shutil 模块提供了一个易于使用的高级接口: >>> import shutil >>> shutil.copyfile('data.db', 'archive.db') >>> shutil.move('/build

Python3 标准库概览

允我心安 提交于 2020-02-04 11:07:07
Python3 标准库概览 操作系统接口 os模块提供了不少与操作系统相关联的函数。 >>> import os >>> os.getcwd() # 返回当前的工作目录 'C:\\Python34' >>> os.chdir('/server/accesslogs') # 修改当前的工作目录 >>> os.system('mkdir today') # 执行系统命令 mkdir 0    建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。 在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用: >>> import os >>> dir(os) <returns a list of all module functions> >>> help(os) <returns an extensive manual page created from the module's docstrings>    针对日常的文件和目录管理任务,:mod:shutil 模块提供了一个易于使用的高级接口: >>> import shutil >>> shutil.copyfile('data.db', 'archive.db') >>> shutil

Flask测试与部署

感情迁移 提交于 2020-01-29 11:20:37
1. 蓝图 之前的学习都是在单个文件中定义数据模型类、表单模型类、视图函数、路由等,但是对于大型项目来说将所有代码放在一个文件会让代码可读性变差且难以维护。 真正的项目应根据具体不同的功能,划分成不同的模块,降低各功能模块之间的耦合度 使用模块导入解决耦合问题: - 即模型类和主程序放在一个模块内、视图函数放在一个模块内(导入app对象):可以降低耦合度,但是不能解决路由映射问题 - 模块导入出现循环导入问题(死锁)----》推迟一方的导入,让另一方先完成导入 - 使用app.route()返回装饰器解决:视图函数只定义不进行路由绑定,在主程序导入视图函数后使用app.route()进行路由绑定 蓝图:用于实现单个应用的视图、模板、静态文件的集合,是一个模块化处理的类(类似于Django中的一个应用模块的所有内容) 简单来说,蓝图就是一个独立模块的抽象代表,可以用来保存在应用对象上执行的操作,主要用来实现客户端请求和URL相互关联的功能 蓝图使用步骤: 1. 创建蓝图对象:必须指定两个参数:蓝图的名字及蓝图所在的模块(蓝图对象用来在视图函数中注册路由使用;蓝图名字指向当前模块) 2. 使用蓝图注册路由绑定视图函数:蓝图对象.route(rules, **args)(暂时存储在蓝图对象的defered_functions列表中) 3. 在主程序app对象上注册蓝图