这次写的是unittest模块的测试用例,属于自动化的门槛,进去了基本算自动化入了门,测试内容很简单,模拟给url推送用户名、密码测试登录功能

先上代码:

#login_test.py
import requests
class Login():
def test_login(self,username,password):
url = "http://localhost:8080/login"
user_pwd = {}
user_pwd["mobilephone"] = username
user_pwd["pwd"] = password
result = requests.get(url, params=user_pwd)
list = (result.text).split(",")
return list[3].split(":")[1].split("}")[0] if __name__ == '__main__':
result = Login()
Return = result.test_login("18688773461","123456")
print(Return)
#test_case.py
from login_test import Login
from ddt import ddt,unpack,data
from openpyxl import load_workbook
import unittest
@ddt
class Run_Test(unittest.TestCase):#继承unittest.TestCase
"""
读取excel文件和cfg文件中数据
:param xlsx:
:param ws:
:return:
"""
wb = load_workbook("login_data.xlsx")
ws = wb.get_sheet_by_name("Sheet1")
list = []
list1 = []
for i in range(1, ws.max_row + 1):
list = []
for j in range(1, ws.max_column + 1):
str = ws.cell(i, j).value
list.append(str)
list1.append(list)
wb.close()
@data(*list1)
@unpack
def test_run1(self,Username,Password,Text):
self.Result = Login()
Return = self.Result.test_login(Username,Password)
self.assertEqual(eval(Return),Text)
#测试用例
if __name__ == '__main__':
unittest.main()
#run_test.py
import unittest,HTMLTestRunnerNew
import test_case
class runtest():
def run_test_1(self):
# 创建测试套件
suite = unittest.TestSuite()
# 找到目录下所有的以test开头的Python文件里面的测试用例
all_test = unittest.defaultTestLoader.discover('.','test_*.py')
# 把所有的测试用例添加进来
for i in all_test:
suite.addTests(i)
# 打开一个保存结果的html文件
fp = open('res_1.html','wb')
# 生成执行用例的对象
runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp,title='2019年3月23日作业_测试报告',description='所有测试情况',tester = "桂马")
# 执行测试套件
runner.run(suite) def run_test_2(self):
# 创建测试套件
suite = unittest.TestSuite()
# 测试套件中添加测试用例
loader = unittest.TestLoader()
suite.addTests(loader.loadTestsFromTestCase(test_case.Run_Test))
# 打开一个保存结果的html文件
fp = open('res_2.html', 'wb')
# 生成执行用例的对象
runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月23日作业_测试报告', description='所有测试情况',tester = "桂马")
# 执行测试套件
runner.run(suite) def run_test_3(self):
# 创建测试套件
suite = unittest.TestSuite()
# 测试套件中添加测试模块
loader = unittest.TestLoader()
suite.addTests(loader.loadTestsFromModule(test_case))
# 打开一个保存结果的html文件
fp = open('res_3.html', 'wb')
# 生成执行用例的对象
runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月23日作业_测试报告', description='所有测试情况',tester = "桂马")
# 执行测试套件
runner.run(suite)
if __name__ == '__main__':
homework = runtest()
homework.run_test_1()
homework.run_test_2()
homework.run_test_3()

xlsx文件内容如下图:

注意点:

    1.为了提高代码的可重复利用性,所以最好功能、用例、运行报告分开写,这点最好养成习惯,很重要

    2.模块的命名,为什么要说这个呢,因为这回我在这上面卡了40多分钟,硬是找不到错误,test_case运行一切顺利,但是run_test就是报错,找了半天,最后改了模块名才发现通过了。血的教训,所以一定要记住

    3.功能未做注释是因为比较简单,最后的返回值只不过是二度切割,把返回结果的value切出来而已,也可以不切,断言换成self.assertIn()来做,不过那样不够准确,所以不太推荐

    4.用例添加进测试套件的方法不止我写的这三种,只不过这三种写起来比较简单,更多的网上也有,这里只是做一个参考和笔记

    5.原本test_case中还有setUp()、tearDown()方法,self.Result = Login()也是写在setUp()中的,但是老报错,时间又不够我排查,索性不写了,直接丢case中

    6.最后的创建套件并运行也可以不生成报告,报告不是必要的,只是顺手写上去的,也可以直接TextTestRunner运行完毕直接查看控制台

    7.果然代码还是要常码,unittest模块以前还是很熟练的,有段时间没碰,写起来就磕磕碰碰的了

备注:

    2019年3月24日更新代码,使用openpyxl、ddt模块优化test_case模块,使用修改后的HTMLTestRunner模块HTMLTestRunnerNew来美化测试报告页面

unittest模块小结的更多相关文章

  1. unittest模块的常用方法:

    unittest模块的常用方法: assertEqual(a, b)     a == b assertNotEqual(a, b)     a != b assertTrue(x)     bool ...

  2. python的单元测试unittest模块

    首先需要导入unittest模块 import unittest import  HTMLTestRunner # TestCase 也就是测试用例## TestSuite 多个测试用例集合在一起,就 ...

  3. Unittest框架小结

    在日常的自动化测试过程中,Python里有一个自带的单元测试框架是unittest模块,简单易用,这里简单介绍下其主要的用法. Unittest测试框架主要包含四个部分 TestCase 也就是测试用 ...

  4. 第二章 使用unittest模块扩展功能测试

    2.1使用功能测试驱动开放一个最简单的应用 # functional_tests.py # -*- coding: utf-8 -*- from selenium import webdriver b ...

  5. 接口测试基础——第6篇unittest模块(三)

    今天是unittest最后一讲,我们解决一下如何只运行一次setUp和tearDown方法以及简单的数据驱动的知识. 1.只运行一次setUp和tearDown方法 很简单,只需要把setUp和tea ...

  6. 接口测试基础——第6篇unittest模块(二)

    通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中setUp和tearDown方法分别运行了三次.没错,这也就是说,每次运行用例之前都会运行setUp和tearDown方法.今 ...

  7. Python unittest模块心得(一)

    关于unittest模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:https://docs.python.org/3.6/library/unittest.html 基础概念介绍: ...

  8. 基于iCamera测试mt9m034 1280X960 高动态相机模块小结

    基于iCamera测试mt9m034 高动态相机模块小结 首先看看此模块的特性 mt9m034 高动态 CMOS模块 1280*960像素 5.48 V/lux-sec >115db 摄像头模块 ...

  9. 基于iCamera测试500w摄像头-mt9p001,mt9p031,mt9p001模块小结

    基于iCamera测试500w摄像头-mt9p001,mt9p031,mt9p001模块小结 先看实物 M12标准无畸变镜头效果 标准CS镜头效果 iCamera底板+mt9p001安装效果 再看看c ...

随机推荐

  1. ecmobile-页面空白,也没异常提示,一般就是这个问题

    分类页空白了://2018年09月07日14:55:21   四:页面空白 将ON_WILL_APPEAR中有关页面布局方法写在ON_DID_APPEAR方法中.例如:

  2. AR图像识别 AR识别图像 AR摄像头识别 外包开发 AR识别应用开发就找北京动点软件

    当绝大多数手机厂商还在追求后置双摄拍照的时候,已经有人开始潜心研究AR手机了.刚刚结束的美国消费电子展上,华硕发布了全新的ZenFone AR手机,配备5.7英寸2K屏.骁龙821处理器.8GB内存, ...

  3. Cheat Engine(简称CE)初体验

    经常玩一些单机游戏,如CS.植物大战僵尸,,这几天刚好网上看到有人用CE修改内存,直接修改内存数据. 之前没有玩过此类东西,激动不已,于是自己也动手写了几行代码, 实现了CS子弹无限制,血量无限,阳光 ...

  4. 【Dubbo源码学习】负载均衡算法(1)-随机算法

    /** * random load balance. * */public class RandomLoadBalance extends AbstractLoadBalance { public s ...

  5. ERROR: cannot launch node of type [teleop/teleop_key]: can't locate node [teleop_key] in package [teleop]

    节点由python写成,编译通过,运行时报错如下: ERROR: cannot launch node of type [teleop/teleop_key]: can't locate node [ ...

  6. MySQL事务的介绍+事务的特性+事务的开启

    事务介绍: 简单的说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,要么全成功要么全失败. 例如:A给B转账5元,流程是从A的账户扣除5元,把5元打入B的账户,B的账户上收到5元 ...

  7. 判断文件是否存在,不要用if exist和if not exist,因为他们会受到文件是否隐藏的影响,改用dir /a 命令代替

    @echo off & setlocal enabledelayedexpansionrem 判断文件是否存在,不要用if exist和if not exist,因为他们会受到文件是否隐藏的影 ...

  8. LeetCode——295. Find Median from Data Stream

    一.题目链接: https://leetcode.com/problems/find-median-from-data-stream 二.题目大意: 给定一段数据流,要求求出数据流中的中位数,其中数据 ...

  9. 使用 JavaScript 拦截和跟踪浏览器中的 HTTP 请求

    HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本技术 ...

  10. Docker安装使用battery historian

    apt-get insatll docker.io battery historian ubuntu下使用 首先要确保是google浏览器,然后用命令行 google-chrome --proxy-s ...