python自学1——代码优化1
优化了上次的代码,请求方式可接收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的更多相关文章
- python自学笔记
python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...
- Python - 自学django,上线一套资产管理系统
一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小 ...
- 拎壶冲冲冲专业砸各种培训机构饭碗篇----python自学(一)
本人一直从事运维工程师,热爱运维,所以从自学的角度站我还是以python运维为主. 一.python自学,当然少不了从hello world开始,话不多说,直接上手练习 1.这个可以学会 print( ...
- [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)
一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...
- [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)
一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...
- [Python自学] day-20 (Django-ORM、Ajax)
一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...
- [Python自学] day-19 (2) (Django-ORM)
一.ORM的分类 ORM一般分为两类: 1.DB first:先在DB中创建数据库.表结构,然后自动生成代码中的类.在后续操作中直接在代码中操作相应的类即可. 2.Code first:直接在代码中实 ...
- [Python自学] day-19 (1) (FBV和CBV、路由系统)
一.获取表单提交的数据 在 [Python自学] day-18 (2) (MTV架构.Django框架)中,我们使用过以下方式来获取表单数据: user = request.POST.get('use ...
- [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)
一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...
随机推荐
- APP测试 - android os6,7 新增特性测试
背景 android os6,7推出后,公司的APP在市场上面反映的一些问题.初始方案在7月份已经整了一份,但是邮件发出大部分同学都看不到,这里在博客里面整理后再在部门内邮件发出来. android ...
- IBATIS动态SQL(1)
转:IBATIS动态SQL 直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的 ...
- 1.Why Apache Spark?
Why Apache Spark? 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark ...
- spring实现文件上传(图片解析)
合抱之木,生于毫末,千里之行,始于足下,要想了解spring的文件上传功能,首先要知道spring是通过流的方式将文件进行解析,然后上传.那么是不是所有需要用的文件上传的地方都要写一遍文件解析器呢? ...
- 定时任务FluentScheduler 学习笔记 .net
第一步添加引用 GitHub源码地址 与详细用法 https://github.com/fluentscheduler/FluentScheduler 下面开始简单的实现 /// <summar ...
- 数据结构随笔-php实现栈
栈(Stack)满足后进先出(LIFO)的原则: 下面利用php实现栈的相关操作: 本实例栈的基本操作: 入栈(push):向栈内压入一个元素,栈顶指针指向栈顶元素 出栈(pop): 从栈顶去除元素, ...
- 分享 C++图像处理的代码简易示例
采用Decoder:stb_image https://github.com/nothings/stb/blob/master/stb_image.h 采用Encoder:tiny_jpeghttps ...
- python之禅 the zen of python
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is ...
- Java 线程宝典
此文 为垃圾文 本人复习用的 emmm 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程 并行与并发: 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时. 并发:通过cpu ...
- 纯CSS实现垂直居中的7种方法
今天申请博客通过了,给大家讲讲我所看到过的纯css实现垂直居中的各种方法.为什么要把它作为第一篇文章呢?因为这是我刚开始接触前端学到的对我最有用的知识,希望大家也可以从中获益! 在CSS中实现水平居中 ...