当前位置:   article > 正文

接口测试和单元测试详解_如何做一个接口的单元测试

如何做一个接口的单元测试


接口测试的本质:就是通过数据驱动,测试类里面的函数。
单元测试的本质:通过代码级别,测试函数。
单元测试的框架:unitest+接口,pytest+WEB----->接口,pytest+jenkins+allure。

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

B站封神的接口测试教程,30天练完70个项目实战(含自动化测试、性能测试),学完即就业,永久白嫖!

requests 模块讲解和应用

基础知识

url:请求的地址 http://xxx:port

param:传递的参数 非必填参数 字典的格式传递参数

method:请求方式 支持get 以及post 字符串形式的参数

cookie:请求的时候传递的cookie值

利用requests模块写代码做接口测试。

利用request封装get请求和post请求,做接口测试。

以下文件都在request文件夹下。

  1. #文件http_request_get.py
  2. import requests
  3. url='http://120.78.128.25:8765/Index/login.html'
  4. res=requests.get(url)
  5. print(res)
  6. print("响应头:",res.headers)
  7. print("响应状态码:",res.status_code)
  8. print("响应正文:",res.text)#html
  1. #文件http_request_post.py
  2. import requests
  3. url='http://httpbin.org/post'
  4. data={"name":"qinghan","age":'18'}
  5. res=requests.post(url,data)#消息实体
  6. print("响应头:",res.headers)
  7. print("响应状态码:",res.status_code)
  8. print("响应正文:",res.text,type(res.text))#html
  9. print("响应正文2:",res.json(),type(res.json()))

伪装请求头 User-Agent

  1. #文件http_request_post_chongzhi.py
  2. import requests
  3. url='http://v.juhe.cn/laohuangli/d'
  4. data={"key":"abf91475fc19f66c2f1fe567edd75257","date":'2014-09-09'}
  5. res=requests.post(url,data)#响应结果的消息实体 http response包含响应头,响应状态码,响应正文,Cookie
  6. print("响应头:",res.headers)
  7. print("响应状态码:",res.status_code)
  8. print("**cookies**:",res.cookies)#从消息实体中拿到cookies
  9. print("**cookies value**:",res.cookies['aliyungf_tc'])#类字典形式 Key取值
  10. print("响应正文:",res.text,type(res.text))#html
  11. print("响应正文2:",res.json(),type(res.json()))
  12. recharge_url='http://v.juhe.cn/laohuangli/d'
  13. recharge_data={"key":"abf91475fc19f66c2f1fe567edd75257","date":'2014-09-09'}
  14. header={'User-Agent':'Mozilla/5.0 '}#伪装充值的请求头
  15. recharge_res=requests.get(recharge_url,recharge_data,headers=header,cookies=res.cookies)
  16. print("充值结果:",recharge_res.json())
  17. print("状态码:",recharge_res.status_code)
  18. print("代理userAgent",recharge_res.request.headers)#获取请求头 request
  19. #伪装请求头骗服务器!可以用来爬虫,如果别人有更高级的反爬虫那就不行了。哈哈

复制消息实体中拿到cookie

  1. #文件http_request_post_cookies.py
  2. import requests
  3. url='http://v.juhe.cn/laohuangli/d'
  4. data={"key":"abf91475fc19f66c2f1fe567edd75257","date":'2014-09-09'}
  5. res=requests.post(url,data)#消息实体
  6. print("响应头:",res.headers)
  7. print("响应状态码:",res.status_code)
  8. print("**cookies**:",res.cookies)#从消息实体中拿到cookies
  9. print("**cookies value**:",res.cookies['aliyungf_tc'])#类字典形式 Key取值
  10. print("响应正文:",res.text,type(res.text))#html
  11. print("响应正文2:",res.json(),type(res.json()))
  12. '''
  13. 响应头: {'Date': 'Sun, 02 Feb 2020 13:39:07 GMT', 'Content-Type': 'application/json;charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Set-Cookie': 'aliyungf_tc=AQAAAC3SDE8KIAYAonD0eNi5kz0Qf9BA; Path=/; HttpOnly', 'Etag': '063d270dc44003f39cf480b7ec6ff843'}
  14. 响应状态码: 200
  15. **cookies**: <RequestsCookieJar[<Cookie aliyungf_tc=AQAAAC3SDE8KIAYAonD0eNi5kz0Qf9BA for v.juhe.cn/>]>
  16. **cookies value**: AQAAAC3SDE8KIAYAonD0eNi5kz0Qf9BA
  17. 响应正文: {"reason":"successed","result":{"id":"1666","yangli":"2014-09-09","yinli":"甲午(马)年八月十六","wuxing":"杨柳木 开执位","chongsha":"冲牛(丁丑)煞西","baiji":"癸不词讼理弱敌强 未不服药毒气入肠","jishen":"天恩 母仓 月德 不将 四相 阴德 金堂 时阳 生气 天仓","yi":"祭祀 立碑 修坟 启钻 除服 成服 馀事勿取","xiongshen":"五虚 土符 触水龙","ji":"馀事勿取"},"error_code":0} <class 'str'>
  18. 响应正文2: {'reason': 'successed', 'result': {'id': '1666', 'yangli': '2014-09-09', 'yinli': '甲午(马)年八月十六', 'wuxing': '杨柳
  19. '''

登录-充值

了解cookie是先登录的时候会产生,然后在这个网站充值的时候直接就有cookie了。

以下代码来自文件夹Tools。

  1. #清菡没有找到登录和充值的接口,所以用的老黄历的接口模拟测试的。以下代码除了接口地址不对,代码可以用。
  2. #来自文件http_request_1.py。
  3. import requests
  4. class Httprequest:
  5. '''利用requests封装get请求和post请求'''
  6. def http_request(self,url,data,method,cookie=None):
  7. '''url:请求的地址 http://xxx:port
  8. param:传递的参数 非必填参数 字典的格式传递参数
  9. method:请求方式支持get以及post 字符串形式的参数
  10. cookie:请求的时候传递的cookie值'''
  11. if method.lower()=='get':
  12. res = requests.get(url, data, cookies=cookie)
  13. else:
  14. res=requests.post(url,data,cookies=cookie)#响应结果的消息实体 http response包含响应头,响应状态码,响应正文,Cookie
  15. return res#返回一个消息实体
  16. if __name__ =='__main__':
  17. url = 'http://v.juhe.cn/laohuangli/d'
  18. data = {"key": "abf91475fc19f66c2f1fe567edd75257", "date": '2014-09-09'}
  19. res=Httprequest().http_request(url,data,'post')
  20. print("登录结果是:", res.json())
  21. #充值
  22. recharge_url='http://v.juhe.cn/laohuangli/d'
  23. recharge_data={"key":"abf91475fc19f66c2f1fe567edd75257","date":'2014-09-09'}
  24. recharges_res=Httprequest().http_request(recharge_url,recharge_data,'get',res.cookies)
  25. print("充值结果是:",recharges_res.json())
  1. #来自request_danyuanceshi.py文件
  2. #这个项目是没有cookies的啊,你们测试找个有cookie的接口来测试,user_password我没写,可以自己找个接口来测。
  3. import requests
  4. class HttpRequest:
  5. '''利用request封装get请求和post请求'''
  6. def http_request(self,url,data,method,cookie=None):
  7. '''url:请求的地址 http://xxx:port
  8. param:传递的参数 非必填参数 字典的格式传递参数
  9. method:请求方式支持get以及post 字符串形式的参数
  10. cookie:请求的时候传递的cookie值'''
  11. if method.lower()=='get':
  12. res = requests.get(url, data, cookies=cookie)
  13. else:
  14. res=requests.post(url,data,cookies=cookie,verify=False)#响应结果的消息实体 http response包含响应头,响应状态码,响应正文,Cookie
  15. return res#返回一个消息实体
  16. if __name__ =='__main__':
  17. url = 'http://a.buka.tv/buka/api/user/login.do'
  18. data={"user_phone_num":"18210033224","user_password":"保密","user_device":"b9a0c082-e133-f0d5-e7d1-aff61f8e2cf8"}
  19. res=HttpRequest().http_request(url,data,'post')
  20. print("布卡项目登录接口查询结果是:{0}".format(res.text))
  21. print("布卡项目登录接口cookies是:{0}".format(res.cookies))
  22. url_1 = 'http://a.buka.tv/buka/api/usercenterauth/userstate.do'
  23. data = {"user_token":"1234","user_device":"b9a0c082-e133-f0d5-e7d1-aff61f8e2cf8"}
  24. res_2 =HttpRequest().http_request((url_1),data,'post',res.cookies)
  25. print("布卡项目搜索接口查询结果是:{0}".format(res_2.text))
  26. print("布卡项目搜索接口接口cookies是:{0}".format(res.cookies))

python 单元测试-unittest

功能测试

1.写用例: TestCase

2.执行用例:

TestSuite 存储用例。

TestLoader 找用例,找到TestSuite的用例,加载出来。

3.对比实际结果、期望结果,判断用例是否通过,对比结果是否通过叫做断言。

断言:Assert

4.出具测试报告:TextTestRunner

unittest里面的TestCase专门来写用例

写一个测试类,对我们自己写的math method模块里面的类进行单元测试。以下文件都在unittest36文件夹下。首先,创建一个文件math_method.py。

  1. class MathMethod:
  2. def __init__(self,a,b):
  3. self.a=a
  4. self.b=b
  5. def add(self):
  6. return self.a+self.b
  7. def multi(self):
  8. return self.a*self.b
  1. #来自文件case1.py
  2. import unittest
  3. from math_method import MathMethod
  4. class TestMathMethod(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  5. #编写测试用例
  6. #一个用例就是一个函数,不能传参。只有self关键字
  7. #所有的用例(所有的函数,都是test开头,test_)
  8. def test_add_two_positive(self):#两个正数相加 1+1
  9. res=MathMethod(1,1).add()#实际发起请求的结果值
  10. print("1+1的结果值是:",res)
  11. def test_add_two_zero(self):#两个0相加 0+0
  12. res=MathMethod(0,0).add()
  13. print("0+0的结果值是:",res)
  14. def test_add_two_negative(self):#两个负数相加 -1+-2
  15. res=MathMethod(-1,-2).add()
  16. print("0+0的结果是:",res)
  17. if __name__ =='__main__':
  18. unittest.main()

方法1:创建实例。可以只执行1条,也可以执行多条。

  1. #来自文件TestSuite_fanfa1.py
  2. import unittest
  3. from unittest36.case1 import TestMathMethod
  4. suite=unittest.TestSuite()#存储用例的容器
  5. #方法一:
  6. #只执行一条 两个正数相加
  7. #创建实例
  8. suite.addTest(TestMathMethod('test_add_two_zero'))
  9. #再创建一条实例
  10. suite.addTest(TestMathMethod('test_add_two_positive'))
  11. #执行
  12. runner=unittest.TextTestRunner()
  13. runner.run(suite)

文件case1.py和TestSuite_fanfa1.py为1组,run文件TestSuite_fanfa1.py。

方法2:到测试类里面去找用例,根据这个测试类去加载到所有的用例。

loader是一个加载器, 它去帮你寻找用例,寻找完直接用addTest这个方法加到容器TestSuite里面去执行。

  1. #来自文件TestSuite_fanfa2_1.py
  2. import unittest
  3. from unittest36.case1 import TestMathMethod
  4. suite=unittest.TestSuite()#存储用例的容器
  5. #TestLoader 找用例,加载用例
  6. loader=unittest.TestLoader()#创建一个加载器
  7. #是到测试类里去找
  8. suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
  9. #执行
  10. runner=unittest.TextTestRunner()
  11. runner.run(suite)

文件case1.py和TestSuite_fanfa2_1.py为1组,run文件TTestSuite_fanfa2_1.py。

  1. #来自文件case2
  2. import unittest
  3. from math_method import MathMethod
  4. class TestMathMethod(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  5. #编写测试用例
  6. #一个用例就是一个函数,不能传参。只有self关键字
  7. #所有的用例(所有的函数,都是test开头,test_)
  8. def test_add_two_positive(self):#两个正数相加 1+1
  9. res=MathMethod(1,1).add()#实际发起请求的结果值
  10. print("1+1的结果值是:",res)
  11. def test_add_two_zero(self):#两个0相加 0+0
  12. res=MathMethod(0,0).add()#
  13. print("0+0的结果值是:",res)
  14. def test_add_two_negative(self):#两个负数相加 -1+-2
  15. res=MathMethod(-1,-2).add()#
  16. print("0+0的结果是:",res)
  17. class TestMulti(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  18. # #编写测试用例
  19. # 一个用例就是一个函数,不能传参。只有self关键字
  20. # 所有的用例(所有的函数,都是test开头,test_)
  21. def test_multi_two_positive(self):#两个正数相乘 1*1
  22. res=MathMethod(1,1).multi()#
  23. print("unittest36*1的结果值是:",res)
  24. def test_multi_two_zero(self):#两个0相乘 0*0
  25. res=MathMethod(0,0).multi()#
  26. print("0*0的结果值是:",res)
  27. def test_multi_two_negative(self):#两个负数相乘 -1*-2
  28. res=MathMethod(-1,-2).multi()#
  29. print("-unittest36*-2的结果值是:",res)
  30. if __name__ =='__main__':
  31. unittest.main()

方法3:从模块里去加载用例,加载该模块所有的用例。

  1. #来自文件TestSuite_fanfa2_2.py
  2. import unittest
  3. from unittest36.case2 import TestMathMethod
  4. suite=unittest.TestSuite()#存储用例的容器
  5. #TestLoader 找用例,加载用例
  6. loader=unittest.TestLoader()#创建一个加载器
  7. from unittest36 import case1#具体到模块
  8. #会到case2里面去找所有的用例,从模块里加载测试用例
  9. suite.addTest(loader.loadTestsFromModule(case2))
  10. #执行
  11. runner=unittest.TextTestRunner()
  12. runner.run(suite)

文件case2.py和TestSuite_fanfa2_2.py为1组,run文件TestSuite_fanfa2_2.py。

常见的断言


需要掌握的断言

断言 assertEqual

  1. #来自文件Assert.py
  2. # 断言 assertEqual
  3. import unittest
  4. from unittest36.math_method import MathMethod#测试的目标类
  5. class TestMathMethod(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  6. def test_add_two_positive(self):#两个正数相加
  7. res=MathMethod(1,1).add()#实际发起请求的结果值
  8. print("1+1的结果值是:",res)
  9. #加个断言:判断期望值与实际值的对比结果一致计算通过。不一致就算失败。
  10. self.assertEqual(2,res)#assertEqual()来自父类TestCase
  11. def test_add_two_zero(self):#两个0相加 0+0
  12. res=MathMethod(0,0).add()#
  13. print("0+0的结果值是:",res)
  14. self.assertEqual(1, res,"两个0相加出错了!")#断言里面msg是用例执行失败的时候才会显示
  15. def test_add_two_negative(self):#两个负数相加 -1+-2
  16. res=MathMethod(-1,-2).add()#
  17. print("-1+-2的结果值是:",res)
  18. self.assertEqual(-3,res)
  19. class TestMulti(unittest.TestCase): # 继承了unittest里面的TestCase专门来写用例
  20. def test_multi_two_positive(self): # 两个正数相乘 1*1
  21. res = MathMethod(1, 1).multi() #
  22. print("1*1的结果值是:", res)
  23. def test_multi_two_zero(self): # 两个0相乘 0*0
  24. res = MathMethod(0, 0).multi() #
  25. print("0*0的结果值是:", res)
  26. def test_multi_two_negative(self): # 两个负数相乘 -1*-2
  27. res = MathMethod(-1, -2).multi() #
  28. print("-1*-2的结果值是:", res)
  29. if __name__ == '__main__':
  30. unittest.main()
  31. # Assert.py TestSuite_fanfa2_2.py执行
  1. #来自文件TestSuite_fanfa2_2.py
  2. import unittest
  3. from unittest36.Assert import TestMathMethod
  4. suite=unittest.TestSuite()#存储用例的容器
  5. #TestLoader 找用例,加载用例
  6. loader=unittest.TestLoader()#创建一个加载器
  7. from unittest36 import Assert#具体到模块
  8. #会到Assert里面去找所有的用例,从模块里加载测试用例
  9. suite.addTest(loader.loadTestsFromModule(Assert))
  10. #执行
  11. runner=unittest.TextTestRunner()
  12. runner.run(suite)

文件Assert.py和TestSuite_fanfa2_2.py为1组,run文件TestSuite_fanfa2_2.py。

测试报告

  1. #来自文件ceshibaogao_txt.py
  2. import unittest
  3. from unittest36.Assert import TestMathMethod
  4. suite=unittest.TestSuite()#存储用例的容器
  5. #TestLoader 找用例,加载用例
  6. loader=unittest.TestLoader()#创建一个加载器
  7. #是到测试类里去找
  8. suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
  9. #执行
  10. file=open("test.txt",'w+',encoding='UTF-8')
  11. runner=unittest.TextTestRunner(stream=file,verbosity=0)#verbosity=0,verbosity=1,verbosity=2 显示不一样,2最详细
  12. runner.run(suite)
  13. '''
  14. 根据ASCII编码按照字母排序的。
  15. posive#2
  16. zero#3
  17. negative#1
  18. 执行结果:
  19. -1+-2的结果值是: -3
  20. 1+1的结果值是: 2
  21. 0+0的结果值是: 0
  22. '''

文件Assert.py和文件ceshibaogao_txt.py为1组,run文件Tceshibaogao_txt.py。

必须加encoding='UTF-8',否则输出的txt显示乱码。

加了之后,正确显示。

上下文管理器

如果不关闭文件,会占用资源,影响性能。

  1. #shangxiawenguanliqi.py
  2. import unittest
  3. from unittest36.Assert import TestMathMethod
  4. suite=unittest.TestSuite()#存储用例的容器
  5. #TestLoader 找用例,加载用例
  6. loader=unittest.TestLoader()#创建一个加载器
  7. #是到测试类里去找
  8. suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
  9. #执行 上下文管理器
  10. with open("test.txt","w+",encoding="UTF-8")as file:#执行完代码,file会自动关闭掉。
  11. runner=unittest.TextTestRunner(stream=file, verbosity=2)#0 1 2 2是最详细的
  12. runner.run(suite)
  13. print(file.closed)

文件Assert.py和文件shangxiawenguanliqi.py为1组,run文件shangxiawenguanliqi.py。

异常处理

异常处理就是加raise e

  1. #来自文件yichangchuli.py
  2. #异常处理就是加raise e # 异常处理完了之后,记得要抛出去
  3. #如果不加raise e,用例就会全部通过
  4. import unittest
  5. from unittest36.math_method import MathMethod#测试的目标类
  6. class TestMathMethod(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  7. def test_add_two_positive(self):#两个正数相加 unittest36+unittest36
  8. res=MathMethod(1,1).add()#实际发起请求的结果值
  9. print("1+1的结果值是:",res)
  10. try:
  11. self.assertEqual(2,res)#assertEqual()来自父类
  12. except AssertionError as e:
  13. print("出错了,断言错误是{0}".format(e))
  14. raise e # 异常处理完了之后,记得要抛出去
  15. def test_add_two_zero(self):#两个0相加 0+0
  16. res=MathMethod(0,0).add()#
  17. print("0+0的结果值是:",res)
  18. try:
  19. self.assertEqual(1, res,"两个0相加出错了!")#断言里面msg是用例执行失败的时候才会显示
  20. except AssertionError as e:
  21. print("出错了,断言错误是{0}".format(e))
  22. raise e # 异常处理完了之后,记得要抛出去
  23. def test_add_two_negative(self):#两个负数相加 -1+-2
  24. res=MathMethod(-1,-2).add()#
  25. print("-1+-2的结果值是:", res)
  26. try:
  27. self.assertEqual(-3, res)
  28. except AssertionError as e:
  29. print("出错了,断言错误是{0}".format(e))
  30. raise e # 异常处理完了之后,记得要抛出去
  31. class TestMulti(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  32. # #编写测试用例
  33. # #一个用例就是一个函数,不能传参。只有self关键字
  34. # #所有的用例(所有的函数,都是test开头,test_)
  35. def test_multi_two_positive(self):#两个正数相乘 1*1
  36. res=MathMethod(1,1).multi()#
  37. print("unittest36*1的结果值是:",res)
  38. def test_multi_two_zero(self):#两个0相乘 0*0
  39. res=MathMethod(0,0).multi()#
  40. print("0*0的结果值是:",res)
  41. def test_multi_two_negative(self):#两个负数相乘 -1*-2
  42. res=MathMethod(-1,-2).multi()#
  43. print("-unittest36*-2的结果值是:",res)
  44. if __name__ =='__main__':
  45. unittest.main()
  1. #来自文件test_report.py
  2. import unittest
  3. import HTMLTestRunner#别人写好的一个模块,你可以直接调用
  4. from unittest36.set_upandtear_down import TestMathMethod
  5. suite=unittest.TestSuite()#存储用例的容器
  6. #TestLoader 找用例,加载用例
  7. loader=unittest.TestLoader()#创建一个加载器
  8. #是到测试类里去找
  9. suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
  10. #新鲜 html
  11. with open("test_report.html",'wb') as file:
  12. runner=HTMLTestRunner.HTMLTestRunner(stream=file,
  13. verbosity=2,
  14. title="学python自动化 单元测试报告",
  15. description="第一次报告",tester='清菡'
  16. )
  17. runner.run(suite)

文件yichangchuli.py和文件test_report.py为1组,run文件test_report.py。

setUp和tearDown

根据用例名进行识别,每条用例执行前都会执行setUp,每条用例执行完毕后都会执行tearDown,这就是夹心饼干。如果有操作必须在执行用例之前准备好,那就放在setUp里面(例如连接数据库,放在setUp里面),有操作必须在执行用例后要清除掉,那就放在tearDown里面(例如操作完毕,关闭操作数据库,放在tearDown里面)。

  1. #来自文件set_upandtear_down.py
  2. import unittest
  3. from unittest36.math_method import MathMethod#测试的目标类
  4. class TestMathMethod(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  5. def setUp(self):
  6. print("我要开始执行用例了")
  7. def tearDown(self):
  8. print("我已经执行完用例了")
  9. def test_add_two_positive(self):#两个正数相加 unittest36+unittest36
  10. res=MathMethod(1,1).add()#实际发起请求的结果值
  11. print("1+1的结果值是:",res)
  12. try:
  13. self.assertEqual(2,res)#assertEqual()来自父类
  14. except AssertionError as e:
  15. print("出错了,断言错误是{0}".format(e))
  16. raise e # 异常处理完了之后,记得要抛出去
  17. def test_add_two_zero(self):#两个0相加 0+0
  18. res=MathMethod(0,0).add()#
  19. print("0+0的结果值是:",res)
  20. try:
  21. self.assertEqual(1, res,"两个0相加出错了!")#断言里面msg是用例执行失败的时候才会显示
  22. except AssertionError as e:
  23. print("出错了,断言错误是{0}".format(e))
  24. raise e
  25. def test_add_two_negative(self):#两个负数相加 -1+-2
  26. res=MathMethod(-1,-2).add()#
  27. print("-1+-2的结果值是:", res)
  28. try:
  29. self.assertEqual(-3, res)
  30. except AssertionError as e:
  31. print("出错了,断言错误是{0}".format(e))
  32. raise e#异常处理完了之后,记得要抛出去
  33. class TestMulti(unittest.TestCase):#继承了unittest里面的TestCase专门来写用例
  34. # #编写测试用例
  35. # #一个用例就是一个函数,不能传参。只有self关键字
  36. # #所有的用例(所有的函数,都是test开头,test_)
  37. def test_multi_two_positive(self):#两个正数相乘 1*1
  38. res=MathMethod(1,1).multi()#
  39. print("1*1的结果值是:",res)
  40. def test_multi_two_zero(self):#两个0相乘 0*0
  41. res=MathMethod(0,0).multi()#
  42. print("0*0的结果值是:",res)
  43. def test_multi_two_negative(self):#两个负数相乘 -1*-2
  44. res=MathMethod(-1,-2).multi()#
  45. print("-1-2的结果值是:",res)
  46. if __name__ =='__main__':
  47. unittest.main()
  1. #来自文件test_report.py
  2. import unittest
  3. import HTMLTestRunner#别人写好的一个模块,你可以直接调用
  4. from unittest36.set_upandtear_down import TestMathMethod
  5. suite=unittest.TestSuite()#存储用例的容器
  6. #TestLoader 找用例,加载用例
  7. loader=unittest.TestLoader()#创建一个加载器
  8. #是到测试类里去找
  9. suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
  10. #新鲜 html
  11. with open("test_report.html",'wb') as file:
  12. runner=HTMLTestRunner.HTMLTestRunner(stream=file,
  13. verbosity=2,
  14. title="学python自动化 单元测试报告",
  15. description="第一次报告",tester='清菡'
  16. )
  17. runner.run(suite)

文件set_upandtear_down.py和test_report.py为1组,run文件test_report.py。

常识

1.开发写接口的时候定义好的get还是post请求,这些是写死的。

并不是所有的请求都支持get和post,有时候都支持,有时候只支持get,有时候只支持post,根据接口文档来看。

接口抓不到的原因:人家是get请求,你非要post去抓

2.为什么有些接口抓不到?

别的接口,包括接口地址,参数,未必都可以抓到,例如腾讯的,数据会加密或者是根本抓不到。

3.抓到接口了,哪个才是我想要的东西呢?

找关键字。 例如:/User/Api/login 这就是个登录的接口,有Api啊,Api就是关键字。

4.登录的时候有cookie是保存登录信息,例如账户用户名密码。

不是所有的东西都有cookie,这个是开发定义的,看软件的需求呢。第一次登录生成cookie,下次登录就会根据用户名,密码这些信息,对比校验是不是同一个人。这就是cookie。

例如考勤就没有cookie,因为考勤是每天都得打卡得,所以不需要cookie。

5.注意:鼠标放哪就执行哪条用例,如果鼠标放在全部用例的后面,点击run就会执行所有的用例。

总结

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近100个G。

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/785375
推荐阅读
相关标签
  

闽ICP备14008679号