• DDT数据驱动


    总结·

    数据结构:列表、数据字典、json串、元组

    文件:操作思路、txt文件、csv文件、excel文件

    数据库:数据库连接、数据提取、关闭数据库

    pytest参数化:@pytest.mark.parametrize@pytest.fixture,conftest

    一、列表

    1. # 列表定义
    2. listA=['jintian','mingtian','houtian']
    3. # 列表逐个读取(第一种读取方式)
    4. for i in listA:
    5. print("a列表里面的每个元素",i)
    6. # 第二种读取方式
    7. for i in range(0,len(listA)):
    8. print("b列表里的每一个元素",list[i])
    9. # 在列表里面添加某个元素
    10. # append方法
    11. listA.append('dahoutian')

    二、字典

    1. 数据字典的定义
    2. userinfo={'name':'zhangsan','mima':'123456'}
    3. # 关键字读取
    4. for key in userinfo.keys():
    5. print("字典key",key)
    6. # value读取
    7. for value in userinfo.values():
    8. print("字典value",value)
    9. # 全部内容读取
    10. for key in userinfo:
    11. print(key,userinfo[key])
    12. # 数据字典添加,直接赋值
    13. userinfo["email"]='2452803263@qq.com'

    三、json数据

    1. # json文件操作
    2. import json
    3. # 读取json文件
    4. jsonfile=open('collection.json','r',encoding='utf-8')
    5. print(jsonfile)
    6. # 转换数据类型
    7. jsondict=json.load(jsonfile)
    8. # 提取json文件中的内容
    9. # print(jsondict['item'])
    10. for data in jsondict['item']:
    11. # item1下有多个字典内容,你要取哪个序列的内容要写上去,要不然会报错
    12. # print(data['item1'][0]['request']['body']['formdata'])
    13. for d in data ['item1'][0]['request']['body']['formdata']:
    14. # print(d)
    15. for key in d:
    16. print(key,d[key])

    四、txt文本文件数据驱动

    脚本一.

    1. # txt文件读取
    2. # 打开文件
    3. file1=open("../DDT_test/author.txt",'r',encoding='utf-8')
    4. # 读取文件
    5. rows=file1.read()
    6. print(rows)
    7. # 把取出来的文件用逗号分割,第一个和最后一个的中括号去掉
    8. result=rows[1:-1].split(',')
    9. print(result)
    10. # 取值文件
    11. for data in result:
    12. print(data[1:-1])
    1. # 选择若干权限,调用提交用户,选中需要的权限
    2. # 导入包文件
    3. encoding='utf-8'
    4. import pytest
    5. from selenium import webdriver
    6. from selenium.webdriver.support.select import Select
    7. import random
    8. # g_number=6
    9. import time
    10. class Test_select_autho_addgroup():
    11. # 登录初始化:只做一次
    12. def login(self):
    13. self.url = "http://testplt.share.atstudy.com/admin/login/?next=/admin/"
    14. self.driver = webdriver.Chrome()
    15. self.driver.get(self.url)
    16. self.driver.find_element_by_name('username').send_keys('atstudy')
    17. self.driver.find_element_by_name('password').send_keys('51testing')
    18. self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
    19. # 选择某些权限
    20. # @pytest.fixture()
    21. # def test_select_autho(self):
    22. # autholist=[]
    23. # url='http://testplt.share.atstudy.com/admin/auth/permission/'
    24. # self.driver.get(url)
    25. # # for i in range(1,89):
    26. # # if i==number:
    27. # for j in range(0,g_number):
    28. # # 生成随机数
    29. # i=random.randint(1,88)
    30. # print(i)
    31. # autho=self.driver.find_element_by_xpath('//*[@id="result_list"]/tbody/tr['+str(i)+']/th/a').text
    32. # autholist.append(autho)
    33. # print(autholist)
    34. # return autholist
    35. # 添加组
    36. def test_add_group(self):
    37. url = 'http://testplt.share.atstudy.com/admin/auth/group/add/'
    38. self.driver.get(url)
    39. self.driver.find_element_by_id('id_name').send_keys("group1")
    40. # 选中权限添加
    41. # 从文件中获取权限
    42. # 打开txt文件
    43. f1=open("../DDT_test/author.txt","r",encoding='utf-8')
    44. # 读取txt文件
    45. con=f1.read()
    46. # print(con)
    47. result=con[1:-1].split(', ')
    48. print(result)
    49. for autho in result:
    50. print(autho)
    51. # time.sleep(5)
    52. select_auto=self.driver.find_element_by_id('id_permissions_from')
    53. Select(select_auto).select_by_visible_text(autho[1:-1])
    54. # Select(autho).select_by_visible_text('auth | 权限 | Can add permission')
    55. self.driver.find_element_by_xpath('//*[@id="id_permissions_add_link"]').click()
    56. if __name__ == '__main__':
    57. obj=Test_select_autho_addgroup()
    58. obj.login()
    59. obj.test_add_group()

    被读取的文件

    五、DDT与parametrize结合

    脚本

    语法脚本

    1. # DDT与paramterize的结合
    2. # 语法
    3. import pytest
    4. # 传参
    5. def test_fangfa1():
    6. a=[1,2,3]
    7. print(a)
    8. return a
    9. class Test_shi1():
    10. # parametrize要传的参数,应该是容器的项目,项目里面包含一堆值
    11. @pytest.mark.parametrize('ao',test_fangfa1())
    12. def test_fangfa2(self,ao):
    13. b=ao
    14. print(b)
    15. if __name__ == '__main__':
    16. pytest.main(['-s',"test_1.py",'-v'])

    ​​​​​​​

    1. # 通过txt文件选择若干权限,添加组
    2. # 导入包文件
    3. import pytest
    4. from selenium import webdriver
    5. from selenium.webdriver.support.select import Select
    6. # 把一个公用数据引用过来
    7. from DDT_test.file_test import get_autho
    8. class Test_select_autho_addgroup():
    9. # 登录初始化:只做一次
    10. def setup_class(self):
    11. self.url = "http://testplt.share.atstudy.com/admin/login/?next=/admin/"
    12. self.driver = webdriver.Chrome()
    13. self.driver.get(self.url)
    14. self.driver.find_element_by_name('username').send_keys('atstudy')
    15. self.driver.find_element_by_name('password').send_keys('51testing')
    16. self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
    17. # 原本在添加方法里面的url,放到初始化里面,因为每次运行都是要执行的
    18. url = 'http://testplt.share.atstudy.com/admin/auth/group/add/'
    19. self.driver.get(url)
    20. self.driver.find_element_by_id('id_name').send_keys("group1")
    21. # 添加组
    22. @pytest.mark.parametrize('autho',get_autho())
    23. def test_add_group(self,autho):
    24. # 选中权限添加
    25. print("第二个方法下",autho)
    26. select_auth=self.driver.find_element_by_id('id_permissions_from')
    27. Select(select_auth).select_by_visible_text(autho)
    28. self.driver.find_element_by_xpath('//*[@id="id_permissions_add_link"]').click()
    29. if __name__ == '__main__':
    30. # obj=Test_select_autho_addgroup()
    31. # obj.login()
    32. # obj.test_add_group()
    33. # get_autho
    34. pytest.main(['-s','test_add_group.py','-v'])

    六、conftest与DDT结合

    在根目录下新建conftest.py文件

    所有同目录文件运行前,都会先去执行conftext文件

    scope下的session,指的是,命令行运行所对应的范围

    scope下的moudle是指对所有模块

    scope下的class是对类有效

    scope下的function是指对方法有效

    @pytest.fixture(scope='function')

    1. import pytest
    2. @pytest.fixture(scope='session')
    3. # 获取权限列表方法
    4. def get_autho():
    5. # 打开文件
    6. # 权限列表
    7. autholist=[]
    8. file1=open("../DDT_test/author.txt",'r',encoding='utf-8')
    9. # 读取文件
    10. rows=file1.read()
    11. # print(rows)
    12. # 把取出来的文件用逗号分割,第一个和最后一个的中括号去掉
    13. result=rows[1:-1].split(',')
    14. print(result)
    15. # 取值文件
    16. for autho in result:
    17. autholist.append(autho[1:-1])
    18. print("autholist列表里面值",autholist)
    19. return autholist

    七、DDT-CSV

    1. # 获取用户信息
    2. import csv
    3. def get_userdata():
    4. # 登录数据列表
    5. datalist=[]
    6. # 打开文件,以只读方式
    7. file1=open("testcase.csv","r")
    8. # 读文件
    9. rows=csv.reader(file1)
    10. # 跳过首行
    11. rows.__next__()
    12. # 逐行读取文件
    13. for row in rows:
    14. # 因为第三行是入参,所以要转换成字典类型
    15. rowdict=eval(row[2])
    16. datalist.append(rowdict)
    17. print(datalist)
    18. # 把字典数据内容返回给下一个方法
    19. return datalist
    20. # 写入
    21. import csv
    22. def write_csv():
    23. # 打开文件,以只读方式
    24. file1=open("../DDT_test/testcase.csv","r")
    25. # 读文件
    26. rows=csv.reader(file1)
    27. # 跳过首行
    28. rows.__next__()
    29. # 以写入的方式打开报告文件
    30. file2=open("testreport.csv","w",newline="")
    31. writes=csv.writer(file2)
    32. # 将测试内容和实际运行结果写入测试报告文件
    33. for row in rows:
    34. row.append("实际运行结果")
    35. writes.writerow(row)
    36. # 关闭文件
    37. file1.close()
    38. file2.close()
    1. # Django自动化测试平台selenium自动化测试脚本-pytest封装
    2. # 功能名称:登录
    3. # 版本:v2.1_参数化设置_相同处理过程,不同参数
    4. # 描述:常量正常异常用户登录
    5. import pytest
    6. from selenium import webdriver
    7. # 1、创建测试类
    8. # from DDT_test.database_test import get_db_data
    9. from DDT_test.file_test import get_userdata
    10. class Test_Django_Login():
    11. # 2、创建测试方法
    12. # 正常登录测试方法:用户名不存在
    13. # 登录初始化
    14. def setup_method(self):
    15. self.url="http://testplt.share.atstudy.com/admin/login/?next=/admin/"
    16. self.driver=webdriver.Chrome()
    17. self.driver.get(self.url)
    18. # 正常登录测试方法
    19. @pytest.mark.parametrize('userinfo',get_userdata())
    20. def test_login_01(self,userinfo):
    21. # print(userinfo[0])
    22. # print(userinfo[1])
    23. # dd=eval(userinfo)
    24. # print(dd['username'])
    25. # print(dd['password'])
    26. print("用户名",userinfo['username'])
    27. print("密码",userinfo['password'])
    28. print("运行状态",userinfo['state'])
    29. self.driver.find_element_by_name('username').send_keys(userinfo['username'])
    30. # self.driver.find_element_by_name('password').send_keys(pwd)
    31. # self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
    32. # # 统一检查点
    33. # result=self.driver.current_url
    34. # if state==1:
    35. # assert result!=self.url
    36. # else:
    37. # assert result==self.url
    38. if __name__ == '__main__':
    39. pytest.main(['test_login.py','-s','-v'])

    八、DDT-Excel-Pandas

    数据库这种比较适合做参数化

    1. # excel文件操作
    2. def get_userdata():
    3. import pandas as pd
    4. # 打开文件,读文件
    5. df=pd.read_excel('../DDT_test/testcase.xlsx')
    6. # 取得行数是从第二行开始取得,如果是0的话
    7. # row=df.loc[0].values
    8. # print("打印出每行的内容",row)
    9. cloum=df['输入参数'].values
    10. print(type(cloum))
    11. # 转换成列表类型内容
    12. listdata=cloum.tolist()
    13. print("转换成列表后的类型",type(listdata),listdata)
    14. return listdata
    1. # Django自动化测试平台selenium自动化测试脚本-pytest封装
    2. # 功能名称:登录
    3. # 版本:v2.1_参数化设置_相同处理过程,不同参数
    4. # 描述:常量正常异常用户登录
    5. import pytest
    6. from selenium import webdriver
    7. # 1、创建测试类
    8. from DDT_test.file_test import get_userdata
    9. class Test_Django_Login():
    10. # 2、创建测试方法
    11. def setup_method(self):
    12. self.url="http://testplt.share.atstudy.com/admin/login/?next=/admin/"
    13. self.driver=webdriver.Chrome()
    14. self.driver.get(self.url)
    15. # 正常登录测试方法
    16. @pytest.mark.parametrize('userinfo',get_userdata())
    17. def test_login_01(self,userinfo):
    18. print(type(userinfo))
    19. dd=eval(userinfo)
    20. print("用户名",dd['username'])
    21. print("密码",dd['password'])
    22. # print("用户名",userinfo['username'])
    23. # print("密码",userinfo['password'])
    24. # print("运行状态",userinfo['state'])
    25. self.driver.find_element_by_name('username').send_keys(dd['username'])
    26. # self.driver.find_element_by_name('password').send_keys(pwd)
    27. # self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
    28. # # 统一检查点
    29. # result=self.driver.current_url
    30. # if state==1:
    31. # assert result!=self.url
    32. # else:
    33. # assert result==self.url
    34. if __name__ == '__main__':
    35. pytest.main(['test_login_01.py','-s','-v'])

    九、DB技术-DDT

    1. # Django自动化测试平台selenium自动化测试脚本-pytest封装
    2. # 功能名称:登录
    3. # 版本:v2.1_参数化设置_相同处理过程,不同参数
    4. # 描述:常量正常异常用户登录
    5. import pytest
    6. from selenium import webdriver
    7. # 1、创建测试类
    8. from DDT_test.database_test import get_db_data
    9. class Test_Django_Login():
    10. # 2、创建测试方法
    11. # def setup_method(self):
    12. # self.url="http://testplt.share.atstudy.com/admin/login/?next=/admin/"
    13. # self.driver=webdriver.Chrome()
    14. # self.driver.get(self.url)
    15. # 正常登录测试方法
    16. @pytest.mark.parametrize('userinfo', get_db_data())
    17. def test_login_01(self,userinfo):
    18. print(type(userinfo))
    19. aa=userinfo[0]
    20. print(aa)
    21. # dd=eval(userinfo)
    22. # print("用户名",dd['username'])
    23. # print("密码",dd['password'])
    24. # print("用户名",userinfo['username'])
    25. # print("密码",userinfo['password'])
    26. # print("运行状态",userinfo['state'])
    27. # self.driver.find_element_by_name('username').send_keys(dd['username'])
    28. # self.driver.find_element_by_name('password').send_keys(pwd)
    29. # self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
    30. # # 统一检查点
    31. # result=self.driver.current_url
    32. # if state==1:
    33. # assert result!=self.url
    34. # else:
    35. # assert result==self.url
    36. if __name__ == '__main__':
    37. pytest.main(['test_login_02.py','-s','-v'])
    1. # 通过python脚本获取mysql数据库的数据集合
    2. # 知道数据库的访问用户和用户名
    3. def get_db_data():
    4. # 导入类库
    5. import pymysql
    6. # 连接数据
    7. db=pymysql.connect(host='127.0.0.1',db='jwmall',user='root',password='123456',charset='utf8')
    8. # 设置游标,访问数据库,
    9. cursor=db.cursor()
    10. # 通过游标,总执行数据库的一些命令
    11. cursor.execute('select username,password from mmall_user')
    12. # 数据取一个看下,都是固定方法
    13. # 把所有数据取出来看下,是一个元祖的方式
    14. data=cursor.fetchall()
    15. print(data)
    16. # 关闭数据库
    17. db.close()
    18. return data
    19. if __name__ == '__main__':
    20. get_db_data()

    问题: 是test文件时怎么写入、,跟csc的方式是一样的吗?

  • 相关阅读:
    git在merge时做了些什么
    IBM研究员:人工智能+量子计算可解决抗生素耐药性挑战
    OpenSceneGraph3.5.1编译
    湖北绝缘监测仪矿业煤炭石油金矿玉矿铁矿铜矿矿井钢厂
    Fluent Meshing的workflow方法
    网上商城建设:微信小程序直播申请开通流程及开通方法
    用于演示文稿的新 Dapr 幻灯片
    工业蒸汽量预测(速通二)
    深拷贝和浅拷贝
    【C++】:关键字+命名空间+输入输出+缺省参数+函数重载+引用
  • 原文地址:https://blog.csdn.net/weixin_47547541/article/details/126726042