当前位置: 首页 > news >正文

网站建设属于什么最新行业动态

网站建设属于什么,最新行业动态,杭州做网站公司排名,百度指数查询官网入口python-单元测试1 Unittest2 Pytest3 两者区别断言方面用例执行编写规则前后置操作setUp, setUpclass, setUpmodule 区别4 实战操作unittest:pytest:1 Unittest unittest属于python的内置框架,支持多种自动化测试用例的编写,以及支持用例前置条件和后置…

python-单元测试

  • 1 Unittest
  • 2 Pytest
  • 3 两者区别
    • 断言方面
    • 用例执行编写规则
    • 前后置操作
    • setUp, setUpclass, setUpmodule 区别
  • 4 实战操作
    • unittest:
    • pytest:

1 Unittest

unittest属于python的内置框架,支持多种自动化测试用例的编写,以及支持用例前置条件和后置数据清理功能也可以将多个测试用例放在测试集中生成测试报告。

参考:https://blog.csdn.net/weixin_53041251/article/details/124394128

2 Pytest

pytest也是基于python的一个单元测试框架,是基于unittest的一个扩展框架,比unittest更加简洁,方便,pytest最主要可以支持第三方插件内容,可以更加高效的完成日常工作。而且pytest也支持unittest的代码框架内容。

3 两者区别

断言方面

Unittest 的断言是根据自身携带的断言内容,提供了assertEqual, assertFalse, assertTrue 等。
pytest的断言就是根据Python自带的assert断言内容进行使用的

import pytestclass Test_o1:def test_o1(self):a = 'gavin'b = 'gavin''''判断两个值是否相等'''assert a == b'''判断a 是否在 b中'''assert a in b

用例执行编写规则

unittest:

  • 可以使用自定义测试类内容,但必须继承unittest.TestCase的方法,
  • 测试用例需要以test_开头的方法进行编写,用例的执行顺序是根据ASCII的顺序进行执行的。
  • unittest中提供了TestCase(测试用例),TestSuite(测试套件),TestLoder(加载用例),TextTestRunner(执行用例)等方法让测试用例更加方便编写,
  • 编写测试用例必须导入unittest模块,执行用例必须带有unittest.main()参数。

pytest:

  • 测试文件名必须以test_开头的py文件或者以*_test.py结尾的py文件,
  • 测试类名必须以Test开头,测试用例必须以test_开头。
  • Pytest可以进行执行unittest的用例,pytest的执行顺序可以通过第三方插件进行定制顺序,默认是通过从上往下的顺序进行执行。
  • pytest的执行用例不需要导入模块。执行用例可以通过命令行的形式进行执行。

前后置操作

unittest:

  • 可以通过setup()和tearDown()的方法来控制用例的前后置操作,并且每条用例执行前后都会执行前后置操作。
  • 通过setupclass()和teardownclass()方法来控制一个class下的所有用例都只执行1次前后置操作。
import unittestclass Test(unittest.TestCase):def setUp(self):print('unittest前置操作,每次执行用例都会进行执行')def tearDown(self):print('unittest后置操作,每次执行用例都会进行执行')@classmethoddef setUpClass(cls):print('所有用例只执行一次前置操作')@classmethoddef tearDownClass(cls):print('所有用例只执行一次后置操作')def test_01(self):print('用例01')def test_02(self):print('用例02')def test_03(self):print('用例03')if __name__ == '__main__':unittest.main()
frontend.py::Test::test_01 
所有用例只执行一次前置操作
PASSED                           [ 33%]
unittest前置操作,每次执行用例都会进行执行
用例01
unittest后置操作,每次执行用例都会进行执行frontend.py::Test::test_02 
PASSED                                        [66%]
unittest前置操作,每次执行用例都会进行执行
用例02
unittest后置操作,每次执行用例都会进行执行frontend.py::Test::test_03 
PASSED                                        [100%]
unittest前置操作,每次执行用例都会进行执行
用例03
unittest后置操作,每次执行用例都会进行执行
所有用例只执行一次后置操作

pytest:

  • 模块级别的前后置操作(setup_module,teardown_function)表示模块下的测试用例只执行1次前后置操作。
import pytestdef setup_module():print('每次用例执行前,只执行一次测试前置操作')def teardown_module():print('每次用例执行后,只执行一次测试后置操作')def test01():print('用例01')def test02():print('用例02')def test03():print('用例03')if __name__ == '__main__':pytest.main(['-vs'])
frontendpytest.py::test01 
每次用例执行前,只执行一次测试前置操作
PASSED                                         [ 33%]
用例01frontendpytest.py::test02 
PASSED                                         [ 66%]
用例02frontendpytest.py::test03 
PASSED                                         [100%]
用例03
每次用例执行后,只执行一次测试后置操作
import pytest@pytest.fixture()
def login():print('测试用例前置操作')yieldprint('测试用例后置操作')class Test:def test01(self, login):print('用例01')def test02(self, login):print('用例02')def test03(self):print('用例03')if __name__ == '__main__':pytest.main(['-vs'])

通过执行发现,我们在用例03中没有加入fixture,所有他没有执行一些用例的前置和后置操作。

test_fixture.py::Test::test01 
测试用例前置操作
PASSED                                     [ 33%]
用例01
测试用例后置操作test_fixture.py::Test::test02 
测试用例前置操作
PASSED                                     [ 66%]
用例02
测试用例后置操作test_fixture.py::Test::test03 
PASSED                                     [100%]
用例03

setUp, setUpclass, setUpmodule 区别

https://blog.csdn.net/qq_42792477/article/details/102833763

setUp: 类里面,每个测试用例都会调用一遍
setUpclass: 类里面,一个测试用例里面只执行一遍
setUpmodule: 类外面, 提前创建好的内容,之后调用

4 实战操作

unittest:

import unittestimport requestsimport HtmlTestRunner# from HTMLTestRunner import HTMLTestRunner
import ddt# 天气接口的参数化数据
from .HTMLTestRunner import HTMLTestRunnerdata = [{"city": '上海', "key": "331eab8f3481f37868378fcdc76cb7cd", 'result': "查询成功!"},{"city": "上海", "key": "331eab8f3481f37868378fcdc76cb7c",'result': "错误的请求KEY"},{"city": "上", "key": "331eab8f3481f37868378fcdc76cb7cd", 'result': "暂不支持该城市"}]@ddt.ddt
class Test_(unittest.TestCase):def tianqi(self, city, key):'''天气接口'''data = {"key": key,"city": city}r = requests.post(url='http://apis.juhe.cn/simpleWeather/query', data=data)return r.json()def shenfenzheng(self, cardno, key):'''身份证查询接口'''data = {"cardno": cardno,"key": key}r = requests.post('http://apis.juhe.cn/idcard/index', data=data)return r.json()@ddt.data(*data)def test_01(self, data):'''参数化的天气接口'''x = self.tianqi(city=data['city'], key=data['key'])self.assertEqual(x['reason'], data['result'])def test_02(self):'''正确的身份证号正确的key'''cardno = '130428197411155947'  # 身份证信息通过Faker随机创建key = "f40a75704fac353952a6534a18f9f437"# 请求查询身份证接口a = self.shenfenzheng(cardno, key)self.assertIn(a['reason'], '成功的返回')@unittest.skip('强制跳过,不需要条件')def test_03(self):'''正确的身份证号错误的key(跳过用例)'''cardno = '130428197411155947'key = "f40a75704fac353952a6534a18f9f43"a = self.shenfenzheng(cardno, key)self.assertEqual(a['reason'], '错误的请求KEY')@unittest.skipIf(True, '条件成立时候,进行跳过')def test_04(self):'''错误的身份证号正确的key(跳过用例)'''cardno = '42082120031108929'key = "f40a75704fac353952a6534a18f9f437"a = self.shenfenzheng(cardno, key)self.assertEqual(a['reason'], '请输入正确的15或18位身份证')if __name__ == '__main__':unittest.main()# report_path = 'report.html'## # suite = unittest.TestLoader().discover("./", "test*.py")# # print('--------', suite)## # 以只写方式打开测试报告文件# fp = open(#     r"C:\Users\zhihguo\PycharmProjects\Capgemini\Pytest_1\new_tests\test01.html",#     "wb")# # 实例化 HTMLTestRunner 对象  stream:open 函数打开的文件流; title:[可选参数],为报告标题; description:[可选参数],为报告描述信息;比如操作系统、浏览器等版本;# runner = HTMLTestRunner(stream=fp, title="自动化测试报告", description="Chrome 浏览器")# # 执行# # runner.run(suite)# # 关闭# # f.close()# ## testunit = unittest.TestSuite()## # 加载用例## testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test_))## # 执行用例## runner.run(testunit)## # 关闭报告## fp.close()''''''# import unittest# from HTMLTestRunner import HTMLTestRunner## # # 生成测试套件# # suite = unittest.TestLoader().discover(".\\", "test*.py")# # 以只写方式打开测试报告文件# f = open(r"test01.html", "wb")# # 实例化 HTMLTestRunner 对象  stream:open 函数打开的文件流; title:[可选参数],为报告标题; description:[可选参数],为报告描述信息;比如操作系统、浏览器等版本;# runner = HTMLTestRunner(stream=f, title="自动化测试报告", description="Chrome 浏览器")# testunit = unittest.TestSuite()## # 加载用例## testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test_))# # 执行# runner.run(testunit)# # 关闭# f.close()

pytest:

import requestsimport jsonimport pytest# 参数不同值# 天气接口的参数化数据data = [({"city": '上海', "key": "331eab8f3481f37868378fcdc76cb7cd", 'result': "查询成功!"}),({"city": "上海", "key": "331eab8f3481f37868378fcdc76cb7c", 'result': "错误的请求KEY"}),({"city": "上", "key": "331eab8f3481f37868378fcdc76cb7cd", 'result': "暂不支持该城市"})]class TestCase:def weather(self, city, key):url = 'http://apis.juhe.cn/simpleWeather/query'# 查询天气接口参数data = {'city': city,'key': key}r = requests.post(url, data=data)return r.json()def shenfenzheng(self, cardno, key):'''身份证查询接口'''data = {"cardno": cardno,"key": key}r = requests.post('http://apis.juhe.cn/idcard/index', data=data)return r.json()@pytest.mark.parametrize('data', data)def test_01(self, data):# 调用天气预报接口r = TestCase().weather(city=data['city'], key=data['key'])assert r['reason'] == data['result']def test_02(self):'''正确的身份证号正确的key'''cardno = '130428197411155947'  # 身份证信息通过Faker随机创建key = "f40a75704fac353952a6534a18f9f437"# 请求查询身份证接口a = self.shenfenzheng(cardno, key)assert a['reason'] == '成功的返回'@pytest.mark.skip('强制跳过,不需要条件')def test_03(self):'''正确的身份证号错误的key(跳过用例)'''cardno = '130428197411155947'key = "f40a75704fac353952a6534a18f9f43"a = self.shenfenzheng(cardno, key)assert a['reason'] == '错误的请求KEY'@pytest.mark.skipif(True, reason='条件成立时候,进行跳过')def test_04(self):'''错误的身份证号正确的key(跳过用例)'''cardno = '42082120031108929'key = "f40a75704fac353952a6534a18f9f437"a = self.shenfenzheng(cardno, key)assert a['reason'] in '请输入正确的15或18位身份证'if __name__ == '__main__':pytest.main(['-s'])
http://www.15wanjia.com/news/6286.html

相关文章:

  • 修改wordpress ftp端口上海怎么做seo推广
  • 公司做网站推广要注意什么企业网站设计
  • 开网上授课的网站应该怎么做360上网安全导航
  • 王烨森国内seo公司哪家最好
  • 网站页面构成网络营销的发展历程
  • 做网站用墨刀与axure东莞头条最新新闻
  • 怎么建网站挣钱百度推广销售员好做吗
  • 非专业人士可以做网站编辑的工作吗网站搜索优化排名
  • 哪里可以做足球网站百度经验官网
  • 凡科建站的应用场景百度关键词优化大
  • 做软件挣钱的网站百度搜索高级搜索
  • 怎样做淘宝客网站最新国际消息
  • 邢台外贸网站建设国内打开google网页的方法
  • 开发网站的好处百度网站首页
  • 大连网站制作赞ls15227苏州百度推广服务中心
  • 企业网站优化服务主要围绕哪些要素?为什么?百度一下你就知道主页
  • wordpress 缩略图css遮罩比优化更好的词是
  • 上海单位网站建设常州百度关键词优化
  • wordpress zp湖南正规关键词优化报价
  • 太原网站建设公司广州最新疫情
  • 做彩票网站代理犯法吗高端网站建设深圳
  • 做网站前端需要自写css么宁波网站建设优化企业
  • 龙岩政府网seo的培训班
  • 网站建设的原则和目标女教师遭网课入侵直播录屏曝光se
  • 类似淘宝网站建设费用现在做网络推广好做吗
  • 微信公众号排版app天津seo推广软件
  • 做网站需要公司么手机百度网盘下载慢怎么解决
  • 营口建网站网络营销教学大纲
  • 技术先进的网站建设公司软文发布平台排名
  • 南昌哪里可以做电商网站如何搜索关键词