直接使用pytest运行unittest脚本时,pytest无法使用unittest下的setUp(),这也是pytest和unittest为数不多差异。有两种替换方法:
unittest源码示例:
from unittest import TestCase
from ApiT.feed.feed_video_parse import video_parse
class Test_video_parse(TestCase):
def setUp(self, url_videos = ['https://v.ixigua.com/JhshhQo/','https://v.kuaishou.com/5WIabR', 'https://v.douyin.com/Jhs8bpj/',
'https://b23.tv/wGJ4hU']):
# 西瓜、快手、抖音、bilibili视频类型校验
self.url_videos = url_videos
def test_video_parse(self, url_video = 'https://youtu.be/B6pRp8aCYXQ'):
# 返回结构校验
res = video_parse(url_video)
# 返回的dict格式,即正常解析视频地址
if isinstance(res, dict):
assert res['data'].__contains__('id')
assert res['data'].__contains__('thumb')
assert res['data'].__contains__('source_site')
assert res['data'].__contains__('source_url')
assert res['data'].__contains__('video')
assert res['data'].__contains__('parse')
if url_video.__contains__('kuaishou') or url_video.__contains__('youtu'):
pass
else:
assert res['data'].__contains__('time_length')
else:
print('error ! ')
def test_video_parse_type(self):
for url_video in self.url_videos :
self.test_video_parse(url_video)
- 将setUp()变更为pytest可以识别的方法:
def setup_method(self, method, url_videos = ['https://v.ixigua.com/JhshhQo/','https://v.kuaishou.com/5WIabR', 'https://v.douyin.com/Jhs8bpj/', 'https://b23.tv/wGJ4hU']): # 西瓜、快手、抖音、bilibili视频类型校验 self.url_videos = url_videos
- 使用pytest.fixture注解:
- 将setUp()方法重名为非特殊方法名,比如:one
- 给one()方法添加
@pytest.fixture()
注解 - 在调用到one()方法的地方添加`@pytest.mark.usefixtures(‘one’),指明该方法会调用one()
from unittest import TestCase import allure import pytest from ApiT.feed.feed_video_parse import video_parse @allure.feature('视频解析接口测试') class Test_video_parse(): @pytest.fixture() def one(self, url_videos = ['https://v.ixigua.com/JhshhQo/','https://v.kuaishou.com/5WIabR', 'https://v.douyin.com/Jhs8bpj/', 'https://b23.tv/wGJ4hU']): # 西瓜、快手、抖音、bilibili视频类型校验 self.url_videos = url_videos def test_video_parse(self, url_video = 'https://youtu.be/B6pRp8aCYXQ'): # 返回结构校验 res = video_parse(url_video) # 返回的dict格式,即正常解析视频地址 if isinstance(res, dict): assert res['data'].__contains__('id') assert res['data'].__contains__('thumb') assert res['data'].__contains__('source_site') assert res['data'].__contains__('source_url') assert res['data'].__contains__('video') assert res['data'].__contains__('parse') if url_video.__contains__('kuaishou') or url_video.__contains__('youtu'): pass else: assert res['data'].__contains__('time_length') else: print('error ! ') @pytest.mark.usefixtures('one') def test_video_parse_type(self): for url_video in self.url_videos : self.test_video_parse(url_video)