数据结构:列表、数据字典、json串、元组
文件:操作思路、txt文件、csv文件、excel文件
数据库:数据库连接、数据提取、关闭数据库
pytest参数化:@[email protected],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"]='[email protected]'
# 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的方式是一样的吗?