数据结构:列表、数据字典、json串、元组
文件:操作思路、txt文件、csv文件、excel文件
数据库:数据库连接、数据提取、关闭数据库
pytest参数化:@pytest.mark.parametrize@pytest.fixture,conftest
- # 列表定义
- listA=['jintian','mingtian','houtian']
-
- # 列表逐个读取(第一种读取方式)
- for i in listA:
- print("a列表里面的每个元素",i)
-
- # 第二种读取方式
- for i in range(0,len(listA)):
- print("b列表里的每一个元素",list[i])
-
- # 在列表里面添加某个元素
- # append方法
- listA.append('dahoutian')
- 数据字典的定义
- userinfo={'name':'zhangsan','mima':'123456'}
- # 关键字读取
- for key in userinfo.keys():
- print("字典key",key)
- # value读取
- for value in userinfo.values():
- print("字典value",value)
- # 全部内容读取
- for key in userinfo:
- print(key,userinfo[key])
- # 数据字典添加,直接赋值
- userinfo["email"]='2452803263@qq.com'
- # json文件操作
- import json
- # 读取json文件
- jsonfile=open('collection.json','r',encoding='utf-8')
- print(jsonfile)
- # 转换数据类型
- jsondict=json.load(jsonfile)
- # 提取json文件中的内容
- # print(jsondict['item'])
- for data in jsondict['item']:
- # item1下有多个字典内容,你要取哪个序列的内容要写上去,要不然会报错
- # print(data['item1'][0]['request']['body']['formdata'])
- for d in data ['item1'][0]['request']['body']['formdata']:
- # print(d)
- for key in d:
- print(key,d[key])
脚本一.
- # txt文件读取
- # 打开文件
- file1=open("../DDT_test/author.txt",'r',encoding='utf-8')
- # 读取文件
- rows=file1.read()
- print(rows)
- # 把取出来的文件用逗号分割,第一个和最后一个的中括号去掉
- result=rows[1:-1].split(',')
- print(result)
- # 取值文件
- for data in result:
- print(data[1:-1])
- # 选择若干权限,调用提交用户,选中需要的权限
- # 导入包文件
- encoding='utf-8'
- import pytest
- from selenium import webdriver
- from selenium.webdriver.support.select import Select
- import random
- # g_number=6
- import time
-
- class Test_select_autho_addgroup():
- # 登录初始化:只做一次
- def login(self):
- self.url = "http://testplt.share.atstudy.com/admin/login/?next=/admin/"
- self.driver = webdriver.Chrome()
- self.driver.get(self.url)
- self.driver.find_element_by_name('username').send_keys('atstudy')
- self.driver.find_element_by_name('password').send_keys('51testing')
- self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
- # 选择某些权限
- # @pytest.fixture()
- # def test_select_autho(self):
- # autholist=[]
- # url='http://testplt.share.atstudy.com/admin/auth/permission/'
- # self.driver.get(url)
- # # for i in range(1,89):
- # # if i==number:
- # for j in range(0,g_number):
- # # 生成随机数
- # i=random.randint(1,88)
- # print(i)
- # autho=self.driver.find_element_by_xpath('//*[@id="result_list"]/tbody/tr['+str(i)+']/th/a').text
- # autholist.append(autho)
- # print(autholist)
- # return autholist
- # 添加组
- def test_add_group(self):
- url = 'http://testplt.share.atstudy.com/admin/auth/group/add/'
- self.driver.get(url)
- self.driver.find_element_by_id('id_name').send_keys("group1")
- # 选中权限添加
- # 从文件中获取权限
- # 打开txt文件
- f1=open("../DDT_test/author.txt","r",encoding='utf-8')
- # 读取txt文件
- con=f1.read()
- # print(con)
- result=con[1:-1].split(', ')
- print(result)
- for autho in result:
- print(autho)
- # time.sleep(5)
- select_auto=self.driver.find_element_by_id('id_permissions_from')
- Select(select_auto).select_by_visible_text(autho[1:-1])
- # Select(autho).select_by_visible_text('auth | 权限 | Can add permission')
- self.driver.find_element_by_xpath('//*[@id="id_permissions_add_link"]').click()
-
- if __name__ == '__main__':
- obj=Test_select_autho_addgroup()
- obj.login()
- obj.test_add_group()
被读取的文件
脚本
语法脚本
- # DDT与paramterize的结合
- # 语法
- import pytest
-
- # 传参
- def test_fangfa1():
- a=[1,2,3]
- print(a)
- return a
- class Test_shi1():
- # parametrize要传的参数,应该是容器的项目,项目里面包含一堆值
- @pytest.mark.parametrize('ao',test_fangfa1())
- def test_fangfa2(self,ao):
- b=ao
- print(b)
-
- if __name__ == '__main__':
- pytest.main(['-s',"test_1.py",'-v'])
-
-
- # 通过txt文件选择若干权限,添加组
- # 导入包文件
- import pytest
- from selenium import webdriver
- from selenium.webdriver.support.select import Select
-
- # 把一个公用数据引用过来
- from DDT_test.file_test import get_autho
-
-
- class Test_select_autho_addgroup():
- # 登录初始化:只做一次
- def setup_class(self):
- self.url = "http://testplt.share.atstudy.com/admin/login/?next=/admin/"
- self.driver = webdriver.Chrome()
- self.driver.get(self.url)
- self.driver.find_element_by_name('username').send_keys('atstudy')
- self.driver.find_element_by_name('password').send_keys('51testing')
- self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
- # 原本在添加方法里面的url,放到初始化里面,因为每次运行都是要执行的
- url = 'http://testplt.share.atstudy.com/admin/auth/group/add/'
- self.driver.get(url)
- self.driver.find_element_by_id('id_name').send_keys("group1")
-
-
- # 添加组
- @pytest.mark.parametrize('autho',get_autho())
- def test_add_group(self,autho):
- # 选中权限添加
- print("第二个方法下",autho)
- select_auth=self.driver.find_element_by_id('id_permissions_from')
- Select(select_auth).select_by_visible_text(autho)
- self.driver.find_element_by_xpath('//*[@id="id_permissions_add_link"]').click()
-
- if __name__ == '__main__':
- # obj=Test_select_autho_addgroup()
- # obj.login()
- # obj.test_add_group()
- # get_autho
- pytest.main(['-s','test_add_group.py','-v'])
在根目录下新建conftest.py文件
所有同目录文件运行前,都会先去执行conftext文件
scope下的session,指的是,命令行运行所对应的范围
scope下的moudle是指对所有模块
scope下的class是对类有效
scope下的function是指对方法有效
@pytest.fixture(scope='function')
- import pytest
-
- @pytest.fixture(scope='session')
- # 获取权限列表方法
- def get_autho():
- # 打开文件
- # 权限列表
- autholist=[]
- file1=open("../DDT_test/author.txt",'r',encoding='utf-8')
- # 读取文件
- rows=file1.read()
- # print(rows)
- # 把取出来的文件用逗号分割,第一个和最后一个的中括号去掉
- result=rows[1:-1].split(',')
- print(result)
- # 取值文件
- for autho in result:
- autholist.append(autho[1:-1])
- print("autholist列表里面值",autholist)
- return autholist
- # 获取用户信息
- import csv
- def get_userdata():
- # 登录数据列表
- datalist=[]
- # 打开文件,以只读方式
- file1=open("testcase.csv","r")
- # 读文件
- rows=csv.reader(file1)
- # 跳过首行
- rows.__next__()
- # 逐行读取文件
- for row in rows:
- # 因为第三行是入参,所以要转换成字典类型
- rowdict=eval(row[2])
- datalist.append(rowdict)
- print(datalist)
- # 把字典数据内容返回给下一个方法
- return datalist
-
- # 写入
- import csv
- def write_csv():
- # 打开文件,以只读方式
- file1=open("../DDT_test/testcase.csv","r")
- # 读文件
- rows=csv.reader(file1)
- # 跳过首行
- rows.__next__()
- # 以写入的方式打开报告文件
- file2=open("testreport.csv","w",newline="")
- writes=csv.writer(file2)
- # 将测试内容和实际运行结果写入测试报告文件
- for row in rows:
- row.append("实际运行结果")
- writes.writerow(row)
- # 关闭文件
- file1.close()
- file2.close()
- # Django自动化测试平台selenium自动化测试脚本-pytest封装
- # 功能名称:登录
- # 版本:v2.1_参数化设置_相同处理过程,不同参数
- # 描述:常量正常异常用户登录
- import pytest
- from selenium import webdriver
-
- # 1、创建测试类
- # from DDT_test.database_test import get_db_data
- from DDT_test.file_test import get_userdata
-
-
- class Test_Django_Login():
- # 2、创建测试方法
- # 正常登录测试方法:用户名不存在
- # 登录初始化
- def setup_method(self):
- self.url="http://testplt.share.atstudy.com/admin/login/?next=/admin/"
- self.driver=webdriver.Chrome()
- self.driver.get(self.url)
- # 正常登录测试方法
- @pytest.mark.parametrize('userinfo',get_userdata())
- def test_login_01(self,userinfo):
- # print(userinfo[0])
- # print(userinfo[1])
- # dd=eval(userinfo)
- # print(dd['username'])
- # print(dd['password'])
- print("用户名",userinfo['username'])
- print("密码",userinfo['password'])
- print("运行状态",userinfo['state'])
-
- self.driver.find_element_by_name('username').send_keys(userinfo['username'])
- # self.driver.find_element_by_name('password').send_keys(pwd)
- # self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
- # # 统一检查点
- # result=self.driver.current_url
- # if state==1:
- # assert result!=self.url
- # else:
- # assert result==self.url
- if __name__ == '__main__':
- pytest.main(['test_login.py','-s','-v'])
数据库这种比较适合做参数化
- # excel文件操作
- def get_userdata():
- import pandas as pd
- # 打开文件,读文件
- df=pd.read_excel('../DDT_test/testcase.xlsx')
- # 取得行数是从第二行开始取得,如果是0的话
- # row=df.loc[0].values
- # print("打印出每行的内容",row)
- cloum=df['输入参数'].values
- print(type(cloum))
- # 转换成列表类型内容
- listdata=cloum.tolist()
- print("转换成列表后的类型",type(listdata),listdata)
- return listdata
- # Django自动化测试平台selenium自动化测试脚本-pytest封装
- # 功能名称:登录
- # 版本:v2.1_参数化设置_相同处理过程,不同参数
- # 描述:常量正常异常用户登录
- import pytest
- from selenium import webdriver
-
- # 1、创建测试类
- from DDT_test.file_test import get_userdata
-
-
- class Test_Django_Login():
- # 2、创建测试方法
- def setup_method(self):
- self.url="http://testplt.share.atstudy.com/admin/login/?next=/admin/"
- self.driver=webdriver.Chrome()
- self.driver.get(self.url)
- # 正常登录测试方法
- @pytest.mark.parametrize('userinfo',get_userdata())
- def test_login_01(self,userinfo):
- print(type(userinfo))
- dd=eval(userinfo)
- print("用户名",dd['username'])
- print("密码",dd['password'])
- # print("用户名",userinfo['username'])
- # print("密码",userinfo['password'])
- # print("运行状态",userinfo['state'])
-
- self.driver.find_element_by_name('username').send_keys(dd['username'])
- # self.driver.find_element_by_name('password').send_keys(pwd)
- # self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
- # # 统一检查点
- # result=self.driver.current_url
- # if state==1:
- # assert result!=self.url
- # else:
- # assert result==self.url
- if __name__ == '__main__':
- pytest.main(['test_login_01.py','-s','-v'])
九、DB技术-DDT
- # Django自动化测试平台selenium自动化测试脚本-pytest封装
- # 功能名称:登录
- # 版本:v2.1_参数化设置_相同处理过程,不同参数
- # 描述:常量正常异常用户登录
- import pytest
- from selenium import webdriver
-
- # 1、创建测试类
- from DDT_test.database_test import get_db_data
-
-
- class Test_Django_Login():
- # 2、创建测试方法
- # def setup_method(self):
- # self.url="http://testplt.share.atstudy.com/admin/login/?next=/admin/"
- # self.driver=webdriver.Chrome()
- # self.driver.get(self.url)
- # 正常登录测试方法
- @pytest.mark.parametrize('userinfo', get_db_data())
- def test_login_01(self,userinfo):
- print(type(userinfo))
- aa=userinfo[0]
- print(aa)
- # dd=eval(userinfo)
- # print("用户名",dd['username'])
- # print("密码",dd['password'])
- # print("用户名",userinfo['username'])
- # print("密码",userinfo['password'])
- # print("运行状态",userinfo['state'])
-
- # self.driver.find_element_by_name('username').send_keys(dd['username'])
- # self.driver.find_element_by_name('password').send_keys(pwd)
- # self.driver.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()
- # # 统一检查点
- # result=self.driver.current_url
- # if state==1:
- # assert result!=self.url
- # else:
- # assert result==self.url
- if __name__ == '__main__':
- pytest.main(['test_login_02.py','-s','-v'])
-
- # 通过python脚本获取mysql数据库的数据集合
- # 知道数据库的访问用户和用户名
- def get_db_data():
- # 导入类库
- import pymysql
- # 连接数据
- db=pymysql.connect(host='127.0.0.1',db='jwmall',user='root',password='123456',charset='utf8')
- # 设置游标,访问数据库,
- cursor=db.cursor()
- # 通过游标,总执行数据库的一些命令
- cursor.execute('select username,password from mmall_user')
- # 数据取一个看下,都是固定方法
- # 把所有数据取出来看下,是一个元祖的方式
- data=cursor.fetchall()
- print(data)
- # 关闭数据库
- db.close()
- return data
-
- if __name__ == '__main__':
- get_db_data()
问题: 是test文件时怎么写入、,跟csc的方式是一样的吗?