25 【python入门指南】如何编写测试代码

python如何编写测试代码

python内置了unittest,使得写应用层的单元测试变得超乎寻常的简单。

1,执行单个测试函数

#!/bin/python

import unittest

class TestMathFunc(unittest.TestCase):
    def test_add(self):
        self.assertEqual(3, 1+2)
        self.assertEqual(4, 2+2)
        self.assertNotEqual(3, 1+3)

    def runTest(self):
        self.test_add()

suite = unittest.TestSuite()
testCase = [TestMathFunc()]
suite.addTests(testCase)
runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)

单元测试,只需要仿照上面的例子写就可以完成自己的测试代码。

其中包含几个部分:

a,测试类(要继承unittest.TestCase);

b,测试小组件,unittest.TestSuite,负责将测试类装入进来;

c,执行类,unittest.TextTestRunner;

2,执行多个测试函数

#!/bin/python

import unittest

class TestMathFunc(unittest.TestCase):
    def test_add(self):
        self.assertEqual(3, 1+2)
        self.assertEqual(4, 2+2)
        self.assertNotEqual(3, 1+3)

    def test_minus(self):
        self.assertEqual(-1, 1-2)

    def runTest(self):
        self.test_add()
        self.test_minus()

suite = unittest.TestSuite()
#testCase = [TestMathFunc(‘test_add‘), TestMathFunc(‘test_minus‘)]
testCase = [TestMathFunc()]
suite.addTests(testCase)
runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)

修改runTest函数,将测试函数包含进来即可。

3,执行多个测试类

#!/bin/python

import unittest

class TestStringFunc(unittest.TestCase):
    def test_str_concat(self):
        self.assertEqual("abcabc", "abc" + "abc")

    def runTest(self):
        self.test_str_concat()

class TestMathFunc(unittest.TestCase):
    def test_add(self):
        self.assertEqual(3, 1+2)
        self.assertEqual(4, 2+2)
        self.assertNotEqual(3, 1+3)

    def test_minus(self):
        self.assertEqual(-1, 1-2)

    def runTest(self):
        self.test_add()
        self.test_minus()

suite = unittest.TestSuite()
testCase = [TestMathFunc(), TestStringFunc()]
suite.addTests(testCase)
runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)

在suite添加多个测试类,即可。

当然还有另外的方式:

...

suite = unittest.TestSuite()

testCase = [TestMathFunc()]
suite.addTests(testCase)

testCase2 = TestStringFunc()
suite.addTest(testCase2)

runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)

通过以上代码片段,即可实现,自主地控制多个测试类,自主地控制多个函数执行测试,十分方便。

4,有时候我们不想每个测试函数都显示调用,而是加载所有test_开头的测试函数,怎么做?

构建两个文件:t3.py,main.py

main文件存放执行代码,t3文件仅存放测试类,不存放任何执行代码

main.py

#!/bin/python#main.py
import unittest
from t3 import TestMathFunc, TestStringFunc

suite2 = unittest.TestLoader().discover(‘.‘, ‘t3.py‘)

runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite2)

t3.py

#!/bin/python
#t3.py

import unittest

class TestStringFunc(unittest.TestCase):
    def test_str_concat(self):
        self.assertEqual("abcabc", "abc" + "abc")

#    def runTest(self):
#        self.test_str_concat()

class TestMathFunc(unittest.TestCase):
    def test_add(self):
        self.assertEqual(3, 1+2)
        self.assertEqual(4, 2+2)
        self.assertNotEqual(3, 1+3)

    def test_minus(self):
        self.assertEqual(-1, 1-2)

#    def runTest(self):
#        self.test_add()
#        self.test_minus()

执行main.py,输出结果:

test_add (t3.TestMathFunc) ... ok
test_minus (t3.TestMathFunc) ... ok
test_str_concat (t3.TestStringFunc) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.001s

通过 unittest.TestLoader().discover(‘.‘, ‘t3.py‘) 将t3文件中包含的所有测试类导入到suite中。

依赖这个功能,我们可以将所有的需要测试的文件,导入到main主函数中,进行集中管理和测试。注意:这里不再依赖runTest函数,只要函数名中包含test前缀就会被包含进来。

5,有时候测试用例需要提供上下文环境,怎么做?

我们针对例子4,仅修改t3.py测试类。

class TestMathFunc(unittest.TestCase):
    def setUp(self):
        print("\nTestMathFunc:setup")
        self.a = 1
        self.b = 2 

    def test_add(self):
        self.assertEqual(3, 1+2)
        self.assertEqual(4, 2+2)
        self.assertNotEqual(3, 1+3)
        self.assertEqual(3, self.a + self.b)

    def test_minus(self):
        self.assertEqual(-1, 1-2)

这里我们准备了环境信息(准备两个变量a和b),使用这两个变量进行单元测试。

test_add (t3.TestMathFunc) ...
TestMathFunc:setup
ok
test_minus (t3.TestMathFunc) ...
TestMathFunc:setup
ok
test_str_concat (t3.TestStringFunc) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK

函数的输出如上。

类的单元测试,每个函数执行之前都会执行setUp函数。

对应的是tearDown,用来销毁构建的环境信息。可以自己尝试下。

参考网站:

更详细的解释:https://www.jianshu.com/p/38948d0d73f5

最详细的官方文档:https://docs.python.org/3/library/unittest.html#module-unittest

原文地址:https://www.cnblogs.com/helww/p/9867982.html

时间: 2024-10-10 01:40:22

25 【python入门指南】如何编写测试代码的相关文章

第3章:Maven使用入门/3.3 编写测试代码

编写测试代码 在约定src/test/java下新建测试代码类 `package com.wys.myapp.helloworld; import org.junit.Test;import static org.junit.Assert.*; public class HelloWorldErrTest { @Testpublic void SayHello(){HelloWorld helloWorld = new HelloWorld();String restult = helloWor

Python之ftp下载文件测试代码

IT审计中有一个最多的执行步骤就是取证.最近的项目过程中,有需要验证ftp服务机密性的需要,就写了一个ftp访问并下载文件的脚本. 此步骤实现目的有三: 1.ftp是否可以匿名访问到敏感信息. 2.在渗透人员拥有低等.中等技术水平前提下,目标ftp服务器的日志记录.入侵检测等是否会产生记录.阻断及预警功能. 3.也是最重要的,在上述条件下,此举基于可渗透时间.现行部署条件.应对防御未来直接支出代价.数据丢失严重性综合得出判断结论,并据此给出建议. 1 #coding=utf-8 2 import

python unittest编写测试代码

做开发的朋友在写代码的同时一般都会写测试代码,这对于做运维的同学却很少用. 今天我们就来写写测试代码,用unittest模块. cat test.py import unittest def IsOdd(n): return n % 2 == 1 class IsOddTests(unittest.TestCase): def setUp(self): print "Test start..............." def tearDown(self): print "T

React-Native入门指南(二)——代码结构

React-Native入门指南 github:https://github.com/vczero/react-native-lession React-Native:用JavaScript开发你的原生应用,释放Native的UI体验,体验 Hybird开发效率. 最近一个星期写的文章如下: 第1篇hello react-native 第2篇认识代码结构 第3篇css和布局 第4篇学会react-native布局 第5篇ui组件 还有几篇需要这这周完成(这块会时刻更新): 第6篇JSX语法 第7

python入门机器学习,3行代码搞定线性回归

本文着重是重新梳理一下线性回归的概念,至于几行代码实现,那个不重要,概念明确了,代码自然水到渠成. "机器学习"对于普通大众来说可能会比较陌生,但是"人工智能"这个词简直是太火了,即便是风云变化的股市中,只要是与人工智能.大数据.云计算相关的概念股票都会有很好的表现.机器学习是实现人工智能的基础,今天早上看了美国著名演员威尔斯密斯和世界最顶级的机器人进行对话的视频,视频中的机器人不论从语言还是表情都表达的非常到位,深感人工智能真的离我们越来越近了,所以学习人工智能前

在Jmeter中使用自定义编写的Java测试代码

分类: 测试工具 2007-01-19 15:02 8204人阅读 评论(3) 收藏 举报 测试javaloadrunner编译器importtemplates 我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","Java Vuser"等协议.同样,Jmeter也支持自定义编写的测试代码,不过与LoadRunner不同的是,Jmeter没有自带编译器,需要借助

.NET单元测试的艺术-3.测试代码

开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录: 1.入门 2.核心技术 3.测试代码 一.测试层次和组织 1.1 测试项目的两种目录结构 (1)集成测试和单元测试在同一个项目里,但放在不同的目录和命名空间里.基础类放在单独的文件夹里. (2)集成测试和单元测试位于不同的项目中,有不同的命名空间. 实践中推荐使用第二种目录结构,因为如果我们不把

MyPython-->进阶篇-->测试代码

测试函数 要学习测试,得要有测试的代码.下面是一个简单的函数,接受名和姓并返回整洁的姓名 name_function.py def get_allname(x,m): allname = ('%s %s'%(x,m)).title() return allname 编写测试代码 from name_function import get_allname print(get_allname('cc','leo')) import unittest class NameTestCase(unitte

AngularJS快速入门指南20:快速参考

thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table.reference>thead>tr>td, table.reference>tbody>tr>td, table.reference>tfoot>tr>td { padding: 8px; line-height: 1.42857143; vertic