0
点赞
收藏
分享

微信扫一扫

软件工程(2019)第二次作业

ivy吖 2022-06-21 阅读 47

(一)选择开发工具

 由于将来想使用Python作为开发语言,并且本机已经安装了Python3.5环境以及IDE,所以这里选择Pycharm作为开发工具。软件截图如下:

软件工程(2019)第二次作业_测试用例

(二)PyUnit测试框架

 既然选择了Python作为开发语言,那么理所当然的就会考虑到使用PyUnit作为自动测试工具。

以下介绍属于测试框架的基本原理和概念部分。

 python的单元测试框架 PyUnit,可以认为是 Java 语言下的单元测试框架 JUnit 的 Python 语言实现版本。

unittest要达到如下目标:

  • 支持自动化测试
  • 让所有的测试脚本共享 开启(setup) 和 关闭(shutdown) 的代码
  • 可以通过集合(collections)的方式来组织测试用例脚本
  • 将所有的测试脚本从测试报告框架中独立出来

为了达到以上目标,unittest支持如下几个重要概念:

  • 测试装置(test fixture)
    为一个或者多个测试用例做一些准备工作,例如:连接一个数据库,创建一个目录,或者开启一个进程
  • 测试用例(test case)
    测试用例是测试行为的最小单元,通过对一些输入输出值的对比来进行测试检查
  • 测试套件(test suite)
    将测试用例 或者 测试用例集合 聚合组织起来的集合。可以批量执行一个测试套件内所有的测 试用例
  • 测试执行器(test runner)
    组织安排测试脚本执行活动的组件。测试执行器通过一些图形界面,文本界面或者返回一些特殊的值来展示测试脚本的测试结果。主要用于生成测试报告

1. 项目目录结构

软件工程(2019)第二次作业_测试用例_02

  • TestDemo (工程名)
  • report
  • report.log(用于保存测试用例调用的日志文件)
  • test_case(放置一些测试用例)
  • test_String.py(关于字符串测试的样例)
  • runtest.py(通过测试套件TestSuite来组装多个测试用例)

2. 基本实例

 字符串判断样例(test_String.py):

import time
import unittest
from functools import wraps
def logit(logfile='E:/Programmer/PYTHON/TestDemo/report/report.log', doc=''):
def logging_decorate(func):
@wraps(func)
def wrapped_function(*args, **kwargs):
log_string = time.strftime('%Y_%m_%d_%H_%M_%S ',time.localtime(
time.time())) + func.__name__ + ' was called.\n' + doc + '\n'

# 打开logfile,并写入内容
with open(logfile, 'a') as opened_file:
opened_file.write(log_string)
return func(*args, **kwargs)
return wrapped_function
return logging_decorate
class TestStringMethods(unittest.TestCase):

def setUp(self):
print('init by setUp...')

def tearDown(self):
print('end by tearDown...')

@logit()
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')

@logit()
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
self.assertTrue('FOO'.isupper(), msg="非全大写")

@unittest.skip('暂时跳过用例test_split的测试')
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()‘

 构造测试集(runtest.py):

import unittest
from TestDemo.test_case import test_String

suite = unittest.TestSuite()
suite.addTest(test_String.TestStringMethods("test_isupper"))
suite.addTest(test_String.TestStringMethods("test_upper"))
suite.addTest(test_String.TestStringMethods("test_split"))
if __name__ == "__main__":
runner = unittest.TextTestRunner()
runner.run(suite)

3. 测试结果

 Ctrl+Shift+F10,运行runtest.py
软件工程(2019)第二次作业_git_03

 结果表明,通过了两个测试,跳过了一个测试。将TestStringMethods()中的某个测试样例做出如下修改:

@logit()
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
self.assertTrue('FOo'.isupper(), msg="非全大写")

 详细错误如图所示:
软件工程(2019)第二次作业_测试用例_04

 结果表明,某个样例未通过。
 我们再来看看日志文件中的内容:

软件工程(2019)第二次作业_git_05

4. 生成测试报告

软件工程(2019)第二次作业_python_06



举报

相关推荐

软件工程实践第二次作业

第二次作业

第二次java作业

MySQL第二次作业

第二次Java作业

0 条评论