自动化测试第七节---内置函数、操作excel、mock接口开发

1、内置函数
        int('123')
        float()
        string()
        tuple()
        set()
        dict(name='zdd',age=18)
        type()#查看类型
        len()#看长度,其实是元素的个数
        id()#看内存地址
        print(sorted([1,7,6,4,9,8]))#排序,不改变原来的list,从小到大
        sorted([1,7,6,4,9,8],reverse=True)#倒叙排列
        print(list(reversed(sorted([1,7,6,4,9,8]))))#反转,从大到小,reversed()打印的是一个内存地址
        isinstance(b,dict)#判断什么类型,返回true或者false
        print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真        
        print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真
        print(bin(10))#十进制转二进制
        print(bool('s'))#把一个对象转换成布尔类型

        print(bytearray('abcde', encoding='utf-8')) # 把字符串变成一个可修改的bytes
        print(callable(my_type)) # 判断传入的对象是否可调用
        print(chr(10)) # 打印数字对应的ascii
        print(ord('b')) # 打印字符串对应的ascii码
        print(dict(a=1, b=2)) # 转换字典
        print(dir(1))#打印传入对象的可调用方法
        print(exec('def a():print("蓝夏")'))#执行python代码,只能执行简单的,定义数据类型和运算

       def calc(a):
              if a%2==0:
              return True
       res=filter(calc,[12,3,5,6,7])
       res=map(calc,[12,3,5,6,7]))
       print(res)#打印的是内存地址
       print(list(filter(calc,[12,3,5,6,7])))#挨个把后面的元素传入到前面的函数调用,如果函数处理完返回true,就把这个元素保存下来,打印出[12, 6],只需要传函数名,不需要调用

       print(list(map(calc,[12,3,5,6,7])))#替你循环调用这个函数,把函数运算完的结果返回回来,打印出[True, None, None, True, None],只需要传函数名,不需要调用

        print(hex(111))#数字转成16进制
        print(sum([1,2,3,4,5]))#求和
        print(max(111,12))#取最大值
        print(oct(111))#把数字转换成8进制
        print(round(11.1111,2))#取几位小数

  例子1:判断输入参数的类型

     def my_type(var):
             if type(var)==list:
                 print('这个是list')
             elif type(var)==dict:
                 print('这个是字典')
            elif type(var)==str:
                print('这个是字符串')
            elif type(var)==int:
                print('int类型')
       my_type({})

例子2:使用filter过滤list中不为真的元素/使用map返回list中每个元素循环调用函数后的结果
res=['123',456,{"age":18},0,[],(1,2,3),(),{},False]
def my_true(value):#判断是否为真,为真,返回true
if value:
return True
print(list(filter(my_true,res)))
print(list(map(my_true,res)))
print(res)

2、操作excel

xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel
先安装模块:
pip install xlrd
pip install xlwt
pip install xlutils
****xlwt模块**********************************************************************************************
import xlwt
title = [ '姓名', '班级', '住址', '手机号']
data = [
['喵喵','巨蟹座','北京',110],
['哈哈','巨蟹座','北京',110],
['茄子','巨蟹座','北京',110]
]
wbk = xlwt.Workbook()# 新建一个excel对象
sheet = wbk.add_sheet('info')# 添加一个sheet页
i=0#控制列
for j in title: # 写入表头
sheet.write(0, i, j) # 写入每行,第一个值是行,第二个值是列,第三个是写入的值
i+=1#每次循环的时候列都加1
line=1#控制行
for d in data:
row=0#控制列
for dd in d:
sheet.write(line, row, dd) # 循环写入每行数据
row+=1
line+=1
wbk.save('nina.xls') # 保存excel必须使用后缀名是.xls的,不能是.xlsx的,可以写绝对路径如r'D: yy.xls'

****xlrd模块*********************************************************************************************
import xlrd
wb = xlrd.open_workbook('stu.xls') ## 打开excel, 打开的这个excel必须存在,否则会报错
print(wb.sheet_names())# 获取所有sheet页的名字
sheet=wb.sheet_by_name('abc2')#根据sheet页的名字获取sheet页
sheet = wb.sheet_by_index(0) # 根据sheet页的索引获取sheet页
print(sheet.nrows)# 获取sheet页的行数,int类型
print(sheet.ncols)# 获取sheet页的列数,int类型
for rownum in range(sheet.nrows): # 循环取每行的数据
print(sheet.row_values(rownum)) # 打印每行信息
cell_A2 = sheet.cell(1, 0).value # 按照索引打印对应单元格内容,第一个值是行,第二个值是列,类型为取值实际的类型
print(cell_A2)

****xlutils模块***********************************************************************************************
xlutils模块用来修改excel的内容,不能直接修改原来的excel内容,必须得先复制一个新的excel,然后对这个新的excel进行修改
from xlrd import open_workbook # 导入xlrd模块中打开excel模块
from xlutils.copy import copy # 导入xlutils模块的复制excel模块
import os
rb = open_workbook('stu.xls')#打开要修改的excel
wb = copy(rb)# 复制一个excel
ws = wb.get_sheet(0)# 通过获取到新的excel里面的sheet页
ws.write(1, 0, 'Lily') # 写入excel,第一个值是行,第二个值是列
wb.save('st_new1.xls') # 保存新的excel,保存excel必须使用后缀名是.xls的,不是能是.xlsx的
os.remove('stu.xls')#删除文件
os.rename('st_new1.xls','stu.xls')#重命名文件

例子1:sql内容写入xls:
def write_excel(file_name,content):
import xlwt
book=xlwt.Workbook()
sheet = book.add_sheet('stu')
title=['id','name']
i=0#控制列数
for t in title:
sheet.write(0,i,t)
i+=1
line_no=1#控制行数,从第二行开始
for line in content:
row=0
for j in line:
sheet.write(line_no,row,j)
row+=1
line_no+=1
book.save(file_name)

sql="select * from stu;"
write_excel('test.xls',conn_mysql(sql
))

例子2:从xls读取数据写入mysql

def is_send(value):
if value==1:
return '已交作业'
if value==0:
return '未交作业'
def readExcel(file_name):#从excel读取内容后保存到mysql
import xlrd
wb = xlrd.open_workbook(file_name)
sheet = wb.sheet_by_index(0)
for i in range(1, sheet.nrows):
line = sheet.row_values(i)
name=line[0]
c1=is_send(line[1])
c2=is_send(line[2])
c3=is_send(line[3])
sql = "insert into jxz_stu valuse('{name}','{c1}','{c2}','{c3}');" .format(name=name,c1=c1,c2=c2,c3=c3)
op_mysql(sql)

3、mock接口开发
mock接口就是模拟接口的意思
1、其他模块的接口没开发好的话,咱们可以写一个接口给mock
2、给别人看数据的时候
import flask
from flask import request
server = flask.Flask(__name__)#把这个python文件当做一个web服务
@server.route('/register',methods=['get','post'])#建立一个路由,route里面的第一个参数是接口的路径
def reg():
    # print(request.values)#获取所有传递的参数
    username=request.values.get('username')
    password=request.values.get('password')
    # username=request.json.get('username')#入参类型为json的话,必须用.json的方法才能获取到数据
    # password=request.json.get('password')#入参类型为json的话,必须用.json的方法才能获取到数据
    if username and password:
        sql = "select username,password from user where username='%s';" % username
        res = op_mysql(sql)  # 执行sql
        if res:
            return '{"code":200,"msg":"你注册的用户已经存在"}'
        else:
            sql = 'insert into user(username,password) values("%s","%s");' % (username, password)
            op_mysql(sql)
            return '{"code":200,"msg"="用户已经注册成功"}'
    else:
        return '{"code":938,"msg"="必填参数未填,请查看接口文档"}'
server.run(port=8000,debug=True,host='0.0.0.0')#运行服务,debug=True表示有修改时自动重启服务,host填写'0.0.0.0'时允许其他人访问该接口,必须是同一个局域网,别人调用是时写你的ip地址








原文地址:https://www.cnblogs.com/ninanie/p/7838440.html