优化了上次的代码,请求方式可接收get和post两种,代码中对两种方式做了判断。

测试结果中提取了测试用例的名称、请求返回的状态、请求的时间。

 #coding:utf-8
import xlrd
import requests #下文中将用到的全局变量
nrows = 0
rdict = {} #存储请求参数
relist=[] #存储返回结果 #从excel中导入数据
def imptestcase(): fname = 'testcase.xlsx'
sheet_name='case1'
bk = xlrd.open_workbook(fname) try:
sheet = bk.sheet_by_name(sheet_name)
except:
print("no sheet in %s named sheet1" %fname) global nrows
nrows = sheet.nrows
ncols = sheet.ncols for i in range(0,ncols):
data = sheet.col_values(i)
global rdict
rdict[data[0]]=data[1:] #将excel读取的数据封装成请求,并发送 def sendpost():
#response = requests.post(url,json = data,headers = headers,verify=False)
for i in range(0,nrows-1):
url = rdict['url'][i] if rdict['headers'][i]!='':
headers = eval(rdict['headers'][i]) #str to dict
else:
headers = {} if rdict['json'][i]!='':
json = rdict['json'][i] #str to dict
else:
json = {} if rdict['params'][i]!='':
params = eval(rdict['params'][i]) #str to dict
else:
params = {} try:
if rdict['method']=='get':
r = requests.get(url,headers = headers,params = params,verify=False)
else:
r = requests.post(url,json = json,headers = headers,verify=False)
r.raise_for_status()
r.encoding=r.apparent_encoding
global relist
relist.append('Casename: '+rdict['casename'][i])
relist.append('Status: '+str(r.status_code))
relist.append('Date: '+r.headers['Date']) except Exception as e:
print(e)
print('fail')
relist.append(str(e)) #把返回的结果输出到html中,形成HTML报告(知识简单的展示,没有样式)
def output_html():
fout=open('output.html','w',encoding='UTF-8', newline='')
fout.write('<html>')
fout.write('<head>')
fout.write('<meta charset = "UTF-8"/>')
fout.write('</head>')
fout.write('<body>')
fout.write('<h1>report<h1>')
fout.write('<table>')
fout.write('<tr>')
#fout.write('<td>%s</td>' % relist)
for i in range(0,len(relist)):
fout.write('<td>%s</td>' % relist[i])
fout.write('</tr>')
fout.write('</table>')
fout.write('</body>')
fout.write('</html>')
fout.close() if __name__ == '__main__':
imptestcase()
sendpost()
output_html()

测试用例

测试结果

之后的计划:

1. 优化导入用例以及封装请求的代码

2. 优化测试结果,展示位更友好的页面

3. 由于这短时间学习的过程中使用的都是notepad来编写代码,随着代码量的增加,下一步考虑使用pycharm等IDE,便于管理。

题外话:

刚开始学习Python,代码写的太low,仅仅为了实现功能而已,博客园的各位大神请勿鄙视,希望能收到好的建议。

python自学1——代码优化1的更多相关文章

  1. python自学笔记

    python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...

  2. Python - 自学django,上线一套资产管理系统

    一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小 ...

  3. 拎壶冲冲冲专业砸各种培训机构饭碗篇----python自学(一)

    本人一直从事运维工程师,热爱运维,所以从自学的角度站我还是以python运维为主. 一.python自学,当然少不了从hello world开始,话不多说,直接上手练习 1.这个可以学会 print( ...

  4. [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)

    一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...

  5. [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)

    一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...

  6. [Python自学] day-20 (Django-ORM、Ajax)

    一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...

  7. [Python自学] day-19 (2) (Django-ORM)

    一.ORM的分类 ORM一般分为两类: 1.DB first:先在DB中创建数据库.表结构,然后自动生成代码中的类.在后续操作中直接在代码中操作相应的类即可. 2.Code first:直接在代码中实 ...

  8. [Python自学] day-19 (1) (FBV和CBV、路由系统)

    一.获取表单提交的数据 在 [Python自学] day-18 (2) (MTV架构.Django框架)中,我们使用过以下方式来获取表单数据: user = request.POST.get('use ...

  9. [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)

    一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...

随机推荐

  1. ES6正则表达式扩展

    前面的话 正则表达式是javascript操作字符串的一个重要组成部分,但在以往的版本中并未有太多改变.然而,在ES6中,随着字符串操作的变更, ES6也对正则表达式进行了一些更新.本文将详细介绍ES ...

  2. InnoDB关键特性之自适应hash索引

    一.索引的资源消耗分析 1.索引三大特点 1.小:只在一个到多个列建立索引 2.有序:可以快速定位终点 3.有棵树:可以定位起点,树高一般小于等于3 2.索引的资源消耗点 1.树的高度,顺序访问索引的 ...

  3. selenium2之文件上传

    我们在使用selenium做web自动化测试的时候也许会碰到需要上传文件或者图片的需求.那么下面给大家介绍一下,selenium是怎么实现文件上传和哪些情况不能直接上传. 一.上传控件标签为input ...

  4. ES6中的类

    前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...

  5. strcpy.strcmp.strlen.strcat函数的实现

    #include <stdio.h> #include <string.h>   char *copy(char *a,char *b);//声明一个复制函数 char *ca ...

  6. Bear and Three Balls

    链接:http://codeforces.com/problemset/problem/653/A                                                   ...

  7. pudian

    https://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%81%E7%A0%81 http://www.voidcn.com/blog/lionzl/article/ ...

  8. BFS:noi6044鸣人与佐助

    PS:一道XX到我心态崩溃的好(傻逼)题. 先粘题目: 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到,只不过 ...

  9. 字符串匹配之KMP,C++实现

    文字介绍KMP我就不讲了,相信大家看了不少别的文章也没看懂,我肯定也不能用文字表达清楚. 最好的办法就是看严老师的视频,讲的很清晰. 请百度 KMP 严蔚敏: 在这里我用C++实现一下: #inclu ...

  10. CSS中2d转换:transition过渡放在:hover伪类中与应用在整个元素中区别

    css的2d转换十分强大,能够在不使用js的情况下,实现页面的元素与用户之间更多动态的交互,增强用户体验.其中使用最多的就是hover伪类. 1.创建一个页面的div元素: <!DOCTYPE ...