一、先看看我的代碼,一個簡單的Demo
'''
Created on 2017年8月11日
#登錄接口參數化
@author: zx
'''
import unittest
import requests
import ddt
import HTMLTestRunner
import time
@ddt.ddt
class Test(unittest.TestCase):
def setUp(self):
print('start')
def tearDown(self):
print('end')
@ddt.data(('張想','123'),
('黃浩','123'),
('肖菊','123'),
('劉威','123'))
@ddt.unpack
def test_example(self,LoginName,Password):
res=requests.get('http://192.168.50.51:8099/Logins/Login',params={'LoginName':LoginName,'Password':Password})
print(res.status_code)
print(res.cookies)
print(res.text)
self.assertEqual(200,res.status_code)
self.assertTrue('true' in res.text)
if __name__ == "__main__":
#定義一個測試容器
suite = unittest.TestSuite()
#將測試用例添加到容器
suite.addTest(Test("test_example"))
now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
filename='D:/Users/zx/workspace/AppiumDemo1/report/'+now+'_result.html'
with open(filename, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行詳情:')
runner.run(suite)
二、用python unittest執行,可以運行測試用例,但是無法生成測試報告,因爲 ‘if name == “main“: ’下面的代碼都沒有執行,看圖:
三、於是用python來執行,但是執行不成功,報錯信息如下圖:
四、期間各種分析原因,換了pycharm運行,包括其他方法:http://blog.csdn.net/xie_0723/article/details/50825310(這裏提到的方法都試過)還是不行。
最後永別的又弄了一個簡單案例,居然生成報告了,唯一的區別是那個用例沒有用到數據驅動。代碼如下:
# coding=utf-8
#1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.註釋:包括記錄創建時間,創建人,項目名稱。
'''
Created on 2016-7-27
@author: Jennifer
Project:使用unittest框架編寫測試用例思路
'''
#3.導入unittest模塊
import unittest
import HTMLTestRunner
import time
#4.定義測試類,父類爲unittest.TestCase。
#可繼承unittest.TestCase的方法,如setUp和tearDown方法,不過此方法可以在子類重寫,覆蓋父類方法。
#可繼承unittest.TestCase的各種斷言方法。
class Test(unittest.TestCase):
#5.定義setUp()方法用於測試用例執行前的初始化工作。
#注意,所有類中方法的入參爲self,定義方法的變量也要“self.變量”
#注意,輸入的值爲字符型的需要轉爲int型
def setUp(self):
#self.number=input('Enter a number:')
#self.number=int(self.number)
self.number=10
#6.定義測試用例,以“test_”開頭命名的方法
#注意,方法的入參爲self
#可使用unittest.TestCase類下面的各種斷言方法用於對測試結果的判斷
#可定義多個測試用例
#最重要的就是該部分
def test_case1(self):
print (self.number)
self.assertEqual(self.number,10,msg='Your input is not 10')
def test_case2(self):
print (self.number)
self.assertEqual(self.number,20,msg='Your input is not 20')
@unittest.skip('暫時跳過用例3的測試')
def test_case3(self):
print (self.number)
self.assertEqual(self.number,30,msg='Your input is not 30')
#7.定義tearDown()方法用於測試用例執行之後的善後工作。
#注意,方法的入參爲self
def tearDown(self):
print ('Test over')
#8如果直接運行該文件(__name__值爲__main__),則執行以下語句,常用於測試腳本是否能夠正常運行
if __name__=='__main__':
#8.1執行測試用例方案一如下:
#unittest.main()方法會搜索該模塊下所有以test開頭的測試用例方法,並自動執行它們。
#執行順序是命名順序:先執行test_case1,再執行test_case2
#unittest.main()
suite=unittest.TestSuite()
suite.addTest(Test('test_case2'))
suite.addTest(Test('test_case1'))
now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
filename='D:/'+now+'_result.html'
with open(filename, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行詳情:')
runner.run(suite)
生成的報告如下:
這裏的樣式是經過改進後的HTMLTestRunner的樣式,喜歡的可以拿走用:http://pan.baidu.com/s/1miFp3vE
五、於是果斷的把數據驅動去掉了,代碼如下:
'''
Created on 2017年8月16日
@author: zx
'''
import unittest
import requests
import HTMLTestRunner
import time
class Test(unittest.TestCase):
def setUp(self):
print('start')
def tearDown(self):
print('end')
def test_example(self):
res=requests.get('http://192.168.50.51:8099/Logins/Login',params={'LoginName':"張想",'Password':'123'})
print(res.status_code)
print(res.cookies)
print(res.text)
self.assertEqual(200,res.status_code)
self.assertTrue('true' in res.text)
if __name__=='__main__':
#8.1執行測試用例方案一如下:
#unittest.main()方法會搜索該模塊下所有以test開頭的測試用例方法,並自動執行它們。
#執行順序是命名順序:先執行test_case1,再執行test_case2
#unittest.main()
suite=unittest.TestSuite()
suite.addTest(Test('test_example'))
now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
filename='D:/'+now+'_result.html'
with open(filename, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行詳情:')
runner.run(suite)
這樣就生成測試報告了: