自动化测试-数据驱动
看来还是要记录啊,不然看的东西都特么忘记了
目前是在公司做功能测试,恩,是的一个小小的功能测试员,怀着对未来的紧张和不安。。于是乎空闲时间在学自动化测试[接口测试和web端ui自动化测试] 测试小组里有一个大牛是专门做自动化测试的,不过是用工具Robot Framework写的。看了下这个工具学起来还是需要一定的成本的,考虑到之前学了一些python基础,于是学工具这块就打消了就计划着先学会用代码写自动化测试吧。后续再学习这个Robot工具吧。
1.关于自动化测试看了有些时间了,出于练手的目的把公司的项目主流程给撸了一遍。收获不是很大(主要看的是虫大大和悠大大的书selenium2+python自动化测试实战)这2本书的特点就是通俗易懂。(免费给这2位大牛打个广告,呵呵哒)
好了!废话就不扯了
今天就记录2个数据驱动的方法吧,也是从上面那2位大牛get到的,当然可能估计大多数人都知道了,不过没关系咱就当记录加强一遍练习方便后续查看也为不知道这2个方法的同学提供方便查看。下面测试用的python3 ,python2当然也能运行
1.ddt驱动 pip安装 // pip install ddt
2.unittest 参数化 pip安装 // pip install parameterized
1.ddt 驱动
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # coding:utf-8
2
3
4 """
5 数据驱动ddt
6 python:3.7.0
7 """
8 import ddt
9 import unittest
10
11 testData=[
12 {"username":"lgh","pwd":"123","text":"登陆成功"},
13 {"username":"","pwd":"123","text":"请输入用户名"},
14 {"username":"xxxx","pwd":"","text":"请再次输入"}
15 ]
16
17 #模拟登陆
18 def login(username,pwd):
19 if username=="lgh" and pwd=="123":
20 return "登陆成功"
21 elif username=="" and pwd=="123":
22 return "请输入用户名"
23 else:
24 return "请再次输入.."
25
26
27
28 @ddt.ddt
29 class Test_Ddt(unittest.TestCase):
30
31 @classmethod
32 def setUpClass(cls):
33 print("start")
34
35 @classmethod
36 def tearDownClass(cls):
37 print("end")
38
39 @ddt.data(*testData)
40 def test_login(self,data):
41 value=login(data["username"],data["pwd"])
42 self.assertEqual(value,data["text"])
43
44
45 if __name__=="__main__":
46 unittest.main()
47
2.unittest 参数化
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # coding:utf-8
2
3 """
4 数据驱动
5 unitest的参数化
6 python:3.7.0
7 """
8 import unittest
9 from parameterized import parameterized
10
11
12 #模拟登陆
13 def login(username,pwd):
14 if username=="lgh" and pwd=="123":
15 return "登陆成功"
16 elif username=="" and pwd=="123":
17 return "请输入用户名"
18 else:
19 return "请再次输入.."
20
21 class Test_Paramet(unittest.TestCase):
22
23 @classmethod
24 def setUpClass(cls):
25 print("start")
26
27 @classmethod
28 def tearDownClass(cls):
29 print("end")
30
31
32 @parameterized.expand([
33 ('lgh', "123", "登陆成功"),
34 ("", '123', "请输入用户名"),
35 ("error", "error", "请再次输入"),
36 ])
37
38 def test_login(self,username, password, assert_text):
39 value=login(username,password)
40 self.assertEqual(value,assert_text)
41
42 if __name__=="__main__":
43 unittest.main()
44
45
写的比较粗糙,不过大概意思能看懂 - -!写了一个模拟登陆,实际写的自动化测试中这块肯定要替换的了。当然还要加一些等等功能,这里就不说了。
以上2中方法实用场景“操作过程都一样的。如用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式” 这里还有一个小作用就是不用去读excel,xml,json,csv,txt啊一些文件 详见虫大大博客
时候不早了,该睡觉了。。。 2018.8.23