项目结构

测试用例

import unittest

class LoginTestCase(unittest.TestCase):

    def test_login_success(self):
self.assertEqual({'code': 200, 'msg': '登录成功'}, self.login('kobe', '666')) def test_login_fail(self):
self.assertEqual({'code': 201, 'msg': '账号或者密码不正确'}, self.login('kobe', '888')) def test_not_username(self):
self.assertEqual({'code': 201, 'msg': '账号不能为空'}, self.login('', '666')) def test_not_password(self):
self.assertEqual({'code': 201, 'msg': '密码不能为空'}, self.login('kobe', '')) def test_not_username_password(self):
self.assertEqual({'code': 201, 'msg': '账号和密码不能为空'}, self.login('', '')) def login(self, username, password):
if username == 'kobe' and password == '666':
return {'code': 200, 'msg': '登录成功'} if username == 'kobe' and username != '' and password != '666' and password != '':
return {'code': 201, 'msg': '账号或者密码不正确'} if username == 'kobe' and password == '':
return {'code': 201, 'msg': '密码不能为空'} if username == '' and password == '666':
return {'code': 201, 'msg': '账号不能为空'} if username == '' and password == '':
return {'code': 201, 'msg': '账号和密码不能为空'}

方法1:从类中加载所有的case

suite.addTest(loader.loadTestsFromTestCase(LoginTestCase))

from test_unittest import LoginTestCase

#创建测试套件对象
suite=unittest.TestSuite()
#创建加载器
loader=unittest.TestLoader()
#将测试用例加载到测试套件种
suite.addTest(loader.loadTestsFromTestCase(LoginTestCase)) #运行测试用例
#创建报告对象
br = BeautifulReport(suite)
test_name = '测试报告1.html' BASE_DIR = os.path.dirname(__file__)
print(BASE_DIR) REPORT_DIR = os.path.join(BASE_DIR, 'report')
print(REPORT_DIR) br.report(description='测试报告', filename=test_name, report_dir=REPORT_DIR)

方法2:从模块中加载所有的测试用例

suite.addTest(loader.loadTestsFromModule(test_unittest))

import test_unittest

# todo 创建测试套件对象
suite = unittest.TestSuite()
# todo 创建加载器
loader = unittest.TestLoader()
# todo 将测试用例加载到测试套件中
suite.addTest(loader.loadTestsFromModule(test_unittest))
# todo 运行测试用例
# todo 创建报告对象
br = BeautifulReport(suite)
test_name = '测试报告.html' BASE_DIR = os.path.dirname(__file__)
print(BASE_DIR) REPORT_DIR = os.path.join(BASE_DIR, 'report')
print(REPORT_DIR) br.report(description='测试报告', filename=test_name, report_dir=REPORT_DIR)

方法3:从文件夹中加载所有的测试用例

suite.addTest(loader.discover(r'D:\second_hand_car\unittest_work'))

#创建suite套件对象
suite=unittest.TestSuite()
#创建加载器
loader=unittest.TestLoader()
#将测试用例加载到测试套件中
suite.addTest(loader.discover(r'D:\second_hand_car\unittest_work'))
#创建报告对象
br=BeautifulReport(suite)
test_name = '测试报告2.html' BASE_DIR = os.path.dirname(__file__)
print(BASE_DIR) REPORT_DIR = os.path.join(BASE_DIR, 'report')
print(REPORT_DIR)
br.report(description='测试报告', filename=test_name, report_dir=REPORT_DIR)

测试报告

***关于报告存储

BASE_DIR=os.path.dirname(__file__):当前项目的根路径
BASE_DIR1=os.path.dirname(os.path.dirname(__file__)):当前项目的根路径的上一级目录
REPORT_DIR=os.path.join(BASE_DIR,'report'):项目目录下创建report包,用于存放测试报告,将report和项目根路径进行拼接,得到完整的包路径

项目结构

如果根目录和所拼接的包不存在,会自动生成所拼接的包

例如:当前report_dir目录不存在,用根目录和report_dir进行拼接,会生成report_dir包

REPORT_DIR = os.path.join(BASE_DIR, 'report_dir')
print(REPORT_DIR)

nittest单元测试框架—加载测试用例的3种方法以及测试报告存储管理的更多相关文章

  1. Python 中 unittest 框架加载测试用例的常用方法

    unittest 当中为我们提供了许多加载用例的方法,这里说下常用的两种方法...推荐使用第二种 第一种加载测试用例的方法:使用加载器加载两个模块 需要把所有的模块加载到套件中 那么就可以自动的运行所 ...

  2. js 动态加载事件的几种方法总结

    本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助   有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...

  3. 加载 AssetBundle 的四种方法

    [加载 AssetBundle 的四种方法] 1.AssetBundle.LoadFromMemoryAsync(byte[] binary, uint crc = 0); 返回AssetBundle ...

  4. (一)JQuery动态加载js的三种方法

    Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...

  5. JavaScript实现判断图片是否加载完成的3种方法整理

    JavaScript实现判断图片是否加载完成的3种方法整理 有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示 ...

  6. 【log4j2 加载配置文件】 加载配置文件的三种方法

    log4j 2读取的配置文件可以分为三类:src下的配置文件.绝对路径的配置文件.相对路径的配置文件. package com.herman.test; import java.io.File; im ...

  7. Java加载资源文件几种方法

    from: http://andyzhu.blog.51cto.com/4386758/775836/ import java.net.URL; import org.springframework. ...

  8. 异步加载js的三种方法

    js加载时间线 : 它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来. 1.创建Document对象,开始解析web页面.解析H ...

  9. jQuery页面加载初始化的3种方法

    jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...

  10. 用css3制作旋转加载动画的几种方法

    以WebKit为核心的浏览器,例如Safari和Chrome,对html5有着很好的支持,在移动平台中这两个浏览器对应的就是IOS和Android.最近在开发一个移动平台的web app,那么就有机会 ...

随机推荐

  1. Windows RPC应用详解

    1.介绍 RPC,全称"Remote Procedure Call",即远程过程调用,它并不是Windows独有的概念,RPC的第一个实现是在unix上:RPC在Windows上的 ...

  2. TP5 where查询一个字段不等于多个值

    // 组装where条件$wheres = [];// 后台人员类型$people = input('people','');switch($people){ case "跟单员" ...

  3. Mac pt-online-schema-change 图文并茂、不锁表在线修改 MySQL 表结构、添加表索引、添加表字段、修改表字段、删除表字段

    导读 percona-toolkit 源自 Maatkit 和 Aspersa 工具,这两个工具是管理 MySQL 的最有名的工具,但 Maatkit 已经不维护了,全部归并到 percona-too ...

  4. 浅析switch和if(开发中这两者的优缺点;分析出优缺点在使用就能更确定自己需要使用哪个函数了)

    分析 Switch 相较于 if 的优点 1.switch 执行效率  高于  if 的执行效率 分析: switch是在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执 ...

  5. MySQL-this is incompatible with sql_mode=only_full_group_by 错误解决

    MySQL-this is incompatible with sql_mode=only_full_group_by 错误解决 编辑配置文件 Linux 中 :my.cnf Windows中 : m ...

  6. 文盘Rust -- FFI 浅尝

    rust FFI 是rust与其他语言互调的桥梁,通过FFI rust 可以有效继承 C 语言的历史资产.本期通过几个例子来聊聊rust与C 语言交互的具体步骤. 场景一 调用C代码 创建工程 car ...

  7. Go 并发模型—Goroutines

    前言 Goroutines 是 Go 语言主要的并发原语.它看起来非常像线程,但是相比于线程它的创建和管理成本很低.Go 在运行时将 goroutine 有效地调度到真实的线程上,以避免浪费资源,因此 ...

  8. 【小小demo】SpringBoot+Layui登录

    easy-login 基于layui 注册.登录简单实现,并他通过拦截器拦截未登录请求. 项目地址文章末尾 登录拦截器 SystemInterceptor preHandle在 Controller ...

  9. iphone拍照的历史顽固问题-鬼影

    iphone11 系列的鬼影问题 近期苹果 iPhone 11 系列的手机又出现了新问题,其中有不少网友表示,自己在用手机拍照后,图片中莫名出现了"鬼影"的现象,这次的" ...

  10. loader的三种配置方式

    在这篇 webpack处理css资源 文章中使用几个常用的loader 来编译 css 代码. 但其实 loader 的配置方式不止一种,一起来看看其它方式~ 在 webpack.config.js ...