unittest

mock基本使用

匿名 (未验证) 提交于 2019-12-03 00:41:02
什么是mock? mock在翻译过来有模拟的意思。这里要介绍的mock是辅助单元测试的一个模块。它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言。 > pip install -U mock 在Python3.x中,mock已经被集成到了unittest单元测试框架中,所以,可以直接使用。   可能你和我初次接触这个概念的时候会有这样的疑问:把要测的东西都模拟掉了还测试什么呢?   但在,实际生产中的项目是非常复杂的,对其进行单元测试的时候,会遇到以下问题: 接口的依赖 外部接口调用 测试环境非常复杂 我们先从最简单例子开始。 modular.py #modular.py class Count(): def add(self): pass mock_demo01.py from unittest import mock import unittest from modular import Count # test Count class class TestCount(unittest.TestCase): def test_add(self): count = Count() count.add = mock.Mock(return_value=13) result = count.add(8,5) self.assertEqual(result,13)

自动化框架-数据驱动

匿名 (未验证) 提交于 2019-12-03 00:39:02
https://www.cnblogs.com/fnng/p/6111516.html 最近在整理接口测试相关的资料,所以,看到有关资料就会多看两眼。偶看到别人发的微信公众号。 曾几何时,也许某大牛说,搞自动化必须要把测试数据放文件里,然后通过程序读取文件。于是,大家纷纷效仿。 什么?你做自动化测试居然不读取测试数据文件,一看就是新手,没逼格。 小王啊!我们这个自动化框架一定得做数据与代码分离,得读取文件啊! 在这个全民微信的年代,各位大牛开了公从号,传授大家自动化测试技术,教点啥呢?那我们就从读取数据文件开始起吧! 什么是数据驱动? 从它的本意来解释,就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说人话,其实就是参数化。 数据驱动有什么用? 对开发来说说,数据驱动无处不在,写好了一个模块,传个参数调用一下,看结果是不是等于预期。 def add(a,b): return a + b if __name__ == ‘__main__‘: result = add(3, 5) assert result == 8 对测试有来说就可厉害了,你知道早期的自动化测试(工具)都是流水式,第一步打开浏览器,第二步输入“abc”,第三步点击按钮。假如我有一个登录,登录的步骤完全一样,就是每次登录时用的账号密码不一样。用数据驱动啊! # 伪代码 def login

转:unittest的几种运行方式

匿名 (未验证) 提交于 2019-12-03 00:15:02
#unittest-test.py import unittest from demo import RunMain import HtmlTestRunner class TestMethod(unittest.TestCase): #类方法 @classmethod def setUpClass(cls): print("类执行之前的方法") @classmethod def tearDownClass(cls): print("类执行之后的方法") #每次方法之前执行 def setUp(self): print("setup") def test_01(self): url_p = "https://easy-mock.com/mock/5d0cce9536b12b2b2e62adc7/example/upload" data = { "hello":"world", "botoo":"123" } res = RunMain(url_p,"POST",data).res #print(res) self.assertIn("undefined_http",str(res['data'])) globals()['img'] = res['data']['img'] #加入缓存 def test_02(self): print(img) url_g ="https:/

unittest的discover方法

匿名 (未验证) 提交于 2019-12-03 00:15:02
转载: https://www.cnblogs.com/imyalost/p/9048386.html discover()方法 )   start_dir: 要测试的模块名或测试用例目录;   pattern='test*.py': 表示用例文件名的匹配原则,下面的例子中匹配文件名为以“test”开头的“.py”文件,星号“*”表示任意多个字符;   top_level_dir=None: 测试模块的顶层目录,如果没有顶层目录,默认为None;   该方法通过从指定的开始目录递归到子目录中查找所有测试模块,并返回包含它们的TestSuite对象,只有与模式匹配测试文件和可导入的模块名称才会被加载。   所有测试模块必须可以从项目的顶层导入,如果起始目录不是顶层目录,则顶层目录必须单独指定。   如果一个测试文件的名称符合pattern,将检查该文件是否包含 load_tests() 函数,如果 load_tests() 函数存在,则由该函数负责加载本文件中的测试用例。   如果不存在,就会执行loadTestsFromModule(),查找该文件中派生自TestCase 的类包含的 test 开头的方法。 # coding=utf-8 import unittest from unittest import defaultTestLoader # 测试用例存放路径 case

接口自动化测试 unittest+request+excel(三)

匿名 (未验证) 提交于 2019-12-03 00:11:01
自动生成接口自动化报告 前期要导入HTMLTestrunner模块,如果没有HTMLTestrunner模块的话,可以百度搜索下载下来。 #!/usr/bin/env python3 # -*-coding:utf-8-*- # __author__: hunter import time from HTMLTestRunner import HTMLTestRunner    # 导入HTMLTestRunner模块 import unittest # 把discover加载测试用例的过程封装到一个函数中 def allCase (): case_dir = 'D:/hunter_/interfaceTest/interface/case' # 定义测试用例所在路径 suite = unittest . TestSuite () # 定义一个测试套件 discover = unittest . defaultTestLoader . discover ( case_dir , pattern = 'test_*.py' , top_level_dir = None ) """ 1、case_dir即测试用例所在目录 2、patten='test_*.py' : 表示用例文件名的匹配规则,“*”表示任意多个字符,这里表示匹配所有以test_开头的文件 3、top_level_dir

Django单元测试

匿名 (未验证) 提交于 2019-12-03 00:02:01
mock 测试 ock 是辅助单元测试的模块,用于测试不方便调用的别人的接口。举个简单的例子,比如说,我们测试django 写的微信登录接口,正常流程下,我们需要前端拉起授权窗口,获取jscode或其他数据。而这一部分操作,我们在单元测试的时候没办法模拟出来。此时,我们希望假设调用微信的接口,正常返回了我们需要的数据,在这种情况下,我们便需要简单的mock 函数,假设已经该函数正常返回了我们的结果,让流程更通畅。 代码demo: 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from rest_framework.test import APITestCase from unittest import mock class AdviserTest(APITestCase): # mock.patch 中指定我们需要mock的函数路径(使用时的路径) @mock .patch( "adviser.views.jscode2session" ) def test_small_app_login( self , mock_jscode2session): # 添加mock 函数的返回值,指定之后,所有的调用到该函数的地方,统一返回 mock_jscode2session.return

3秒钟unittest入门使用

匿名 (未验证) 提交于 2019-12-02 23:59:01
一:unittest跑起来 unittest使用,具体使用方式可以查看unittest官网,以下简单做个介绍,在工作中使用最多的 # 第一步: 创建unittest类,且一定要继承unittest.TestCase class MytestDemo(unittest.TestCase):   第二步: 创建你要运行的方法,且一定是用test开头,unittest是检测test开头就会认为有运行方法,如果不用test开头就不用 def test_show(): print(运行成功)    第三步: 运行,使用main入口 if __name__ == '__main__': unittest.main() 好了至此,你就已经是使用unittest框架了 但是这样其实在工作中不能满足我们,我们在执行测试方法前都会做一些前置条件,依赖于unittest中的几个方法 二、增加初始化的方法, 在类中,添加,setUp (前置方法,每次运行方法时就会运行),tearDown(运行完后的后置处理,每个方法运行时就会运行)setUpClass(第一次运行类时,开始运行) #coding=utf-8 import unittest import requests class MytestDemo(unittest.TestCase): ''' http: // www.kuaidi100.com

unittest单元测试框架总结

匿名 (未验证) 提交于 2019-12-02 23:57:01
unittest单元测试框架总结 Ŀ¼ 一、unittest模块的各个属性说明 二、使用unittest框架编写测试用例思路 三、使用unittest框架编写测试用例实例 一、unittest模块的各个属性说明 点击返回目录 1.unittest的属性如下: ['BaseTestSuite', 'FunctionTestCase', 'SkipTest', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult', 'TestSuite', 'TextTestResult', 'TextTestRunner', '_TextTestResult', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__unittest', 'case', 'defaultTestLoader', 'expectedFailure', 'findTestCases', 'getTestCaseNames', 'installHandler', 'loader', 'main', 'makeSuite', 'registerResult', 'removeHandler', 'removeResult', 'result',

(八) 自动化测试的实例(以浏览器为例)

匿名 (未验证) 提交于 2019-12-02 23:55:01
(一)自动化测试的实例(以浏览器为例) # -*- coding: UTF-8 -*-__author__ = 'xxy'# 将所需要的包导入import timeimport unittestfrom appium import webdriver# 配置设备信息desired_caps = { 'platformName': 'Android', 'deviceName': '0123456789ABCDEF', 'platformVersion': '4.4.2', 'appPackage': 'com.android.launcher3', 'appActivity': 'com.android.launcher3.Launcher', 'unicodeKeyboard':True, 'resetKeyboard':True }# 1.定义测试类,父类为unittest.TestCasseclass AppTest(unittest.TestCase):# 2.定义setup()方法,用于执行测试用例前的初始化工作# 注意,所有类中方法的入参为self,定义方法的变量也要“self.变量 def setUp(self): self.driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)# 3

单元测试

匿名 (未验证) 提交于 2019-12-02 23:45:01
单元测试:   单元测试是对单独的代码块分别进行测试, 以确保它们的正确性, 单元测试主要还是由开发人员来做, 其余的集成测试和系统测试由专业的测试人员来做. python的单元测试代码编写主要记住以下几点:   1. 需要导入 unittest模块   2. 需要继承自 unittest.TestCase 类   3. 单元测试的代码函数名必须以test开头(其他语言也是如此) class TestClass(unittest.TestCase):   def setUp(self):     # 该方法会首先执行,相当于测试前的准备工作   def tearDown(self):     # 该方法会在测试完成后执行, 相当于测试的扫尾工作     pass   def test_app(self):     # 该方法为测试测试代码 单元测试经常用到的断言方法: 原文摘自: https://www.cnblogs.com/skaarl/p/9686793.html