• 自动化测试第七节---内置函数、操作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地址








  • 相关阅读:
    第五章 调优案例分析与实战
    第六章 类文件结构
    推送和即时通迅早写完了,,一直没更新,,期末考了。
    Node.js安装备忘录
    将MyEclipse项目导入到Eclipse中
    40个Java集合类面试题和答案(转载)
    可适配平板、手机的Web开发方式
    一次Web请求过程详解
    常见HTTP状态码
    Web前端视频播放及视频的云存储
  • 原文地址:https://www.cnblogs.com/ninanie/p/7838440.html
Copyright © 2020-2023  润新知