先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

6
7 # 输出
8 Traceback (most recent call last):
9 1
10 File “D:/MyThreading/mymock.py”, line 37, in
11 2
12 print(mock_obj())
13 3
14 File “C:\Python36\lib\unittest\mock.py”, line 939, in call
15 return _mock_self._mock_call(*args, **kwargs)
16 File “C:\Python36\lib\unittest\mock.py”, line 998, in _mock_call
17 result = next(effect)
18 StopIteration

存在依赖关系的功能如何测试?

1 # 支付类
2 class Payment:
3
4 def requestOutofSystem(self, card_num, amount):
5 ‘’’
6 请求第三方外部支付接口,并返回响应码
7 :param card_num: 卡号
8 :param amount: 支付金额
9 :return: 返回状态码,200 代表支付成功,500 代表支付异常失败
10 ‘’’
11 # 第三方支付接口请求地址(故意写错)
12 url = “http://third.payment.pay/”
13 # 请求参数
14 data = {“card_num”: card_num, “amount”: amount}
15 response = requests.post(url, data=data)
16 # 返回状态码
17 return response.status_code
18
19 def doPay(self, user_id, card_num, amount):
20 ‘’’
21 支付
22 :param userId: 用户ID
23 :param card_num: 卡号
24 :param amount: 支付金额
25 :return:
26 ‘’’
27 try:
28 # 调用第三方支付接口请求进行真实扣款
29 resp = self.requestOutofSystem(card_num, amount)
30 print(‘调用第三方支付接口返回结果:’, resp)
31 except TimeoutError:
32 # 如果超时就重新调用一次
33 print(‘重试一次’)
34 resp = self.requestOutofSystem(card_num, amount)
35
36 if resp == 200:
37 # 返回第三方支付成功,则进行系统里面的扣款并记录支付记录等操作
38 print(“{0}支付{1}成功!!!进行扣款并记录支付记录”.format(user_id, amount))
39 return ‘success’
40
41 elif resp == 500:
42 # 返回第三方支付失败,则不进行扣款
43 print(“{0}支付{1}失败!!不进行扣款!!!”.format(user_id, amount))
44 return ‘fail’
45
46 # 单元测试类
47 class payTest(unittest.TestCase):
48
49 def test_pay_success(self):
50 pay = Payment()
51 # 模拟第三方支付接口返回200
52 pay.requestOutofSystem = mock.Mock(return_value=200)
53 resp = pay.doPay(user_id=1, card_num=‘12345678’, amount=100)
54 self.assertEqual(‘success’, resp)
55
56 def test_pay_fail(self):
57 pay = Payment()
58 # 模拟第三方支付接口返回500
59 pay.requestOutofSystem = mock.Mock(return_value=500)
60 resp = pay.doPay(user_id=1, card_num=‘12345678’, amount=100)
61 self.assertEqual(‘fail’, resp)
62
63 def test_pay_time_success(self):
64 pay = Payment()
65 # 模拟第三方支付接口首次支付超时,重试第二次成功
66 pay.requestOutofSystem = mock.Mock(side_effect=[TimeoutError, 200])
67 resp = pay.doPay(user_id=1, card_num=‘12345678’, amount=100)
68 self.assertEqual(‘success’, resp)
69
70 def test_pay_time_fail(self):
71 pay = Payment()
72 # 模拟第三方支付接口首次支付超时,重试第二次失败
73 pay.requestOutofSystem = mock.Mock(side_effect=[TimeoutError, 500])
74 resp = pay.doPay(user_id=1, card_num=‘12345678’, amount=100)
75 self.assertEqual(‘fail’, resp)

也许有小伙伴会问,第三方支付都不能用,我们的测试结果是否是有效的呢?

通常在测试一个模块的时候,是可以认为其他模块的功能是正常的,只针对目标模块进行测试是没有任何问题的,所以说测试结果也是正确的

mock装饰器

一共两种格式

  1. @patch(‘module名字.方法名’)
  2. @patch.object(类名, ‘方法名’)

1 # 装饰类演示
2 from mock import Mock, patch
3
4
5 # 单独的相乘函数
6 def multiple(a, b):
7 return a * b
8
9
10 # 单独的捕获Exception函数
11 def is_error():
12 try:
13 os.mkdir(“11”)
14 return False
15 except Exception as e:
16 return True
17
18
19 # 计算类,包含add方法
20 class calculator(object):
21 def add(self, a, b):
22 return a + b
23
24
25 # 装饰类演示 - 单元测试类
26 class TestProducer(unittest.TestCase):
27
28 # case执行前
29 def setUp(self):
30 self.calculator = calculator()
31
32 # mock一个函数,注意也要指定module
33 @patch(‘mock_learn.multiple’)
34 def test_multiple(self, mock_multiple):
35 mock_multiple.return_value = 3
36 self.assertEqual(multiple(8, 14), 3)
37
38 # mock一个类对象的方法
39 @patch.object(calculator, ‘add’)
40 def test_add(self, mock_add):
41 mock_add.return_value = 3
42 self.assertEqual(self.calculator.add(8, 14), 3)
43
44 # mock调用方法返回多个不同的值
45 @patch.object(calculator, ‘add’)
46 def test_effect(self, mock_add):
47 mock_add.side_effect = [1, 2, 3]
48 self.assertEqual(self.calculator.add(8, 14), 1)
49 self.assertEqual(self.calculator.add(8, 14), 2)
50 self.assertEqual(self.calculator.add(8, 14), 3)
51
52 # mock的函数抛出Exception
53 @patch(‘os.mkdir’)
54 def test_exception(self, mkdir):
55 mkdir.side_effect = Exception
56 self.assertEqual(is_error(), True)
57
58 # mock多个函数,注意函数调用顺序
59 @patch.object(calculator, ‘add’)
60 @patch(‘mock_learn.multiple’)
61 def test_more(self, mock_multiple, mock_add):
62 mock_add.return_value = 1
63 mock_multiple.return_value = 4
64 self.assertEqual(self.calculator.add(3, 3), 1)
65 self.assertEqual(multiple(3, 3), 4)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-mBmiw74B-1713154826755)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

一站式 AI 云服务平台

更多推荐