python 接口测试1 --如何创建和打印日志文件
python自带的logging实在是不好用,推荐使用logbook
思路如下:
1.创建path.py文件,获取工程根路径
2.创建log.py文件,在工程根路径下创建日志文件(文件名称按日期命名),并设置log输出等级
3.执行测试用例,调用log文件
具体实现如下:
1. path.py文件如下: 获取项目的根路径
os.path.abspath(path) 返回path规范化的绝对路径
os.path.dirname(__file__) 获取当前运行脚本的绝对路径
因为os.path.dirname(__file__)返回脚本的路径,存在的问题:
1)必须是实际存在的.py文件,如果在命令行执行,则会引发异常NameError: name '__file__' is not defined
2)在运行的时候如果输入完整的执行的路径,则返回.py文件的全路径如:
Python c:/test/test.py 则返回路径 c:/test ,如果是python test.py 则返回空
所以 结合os.path.abspath用,效果会好
os.path.dirname(os.path.abspath(__file__)),os.path.abspath(__file__)返回的是.py文件的绝对路径
这就是os.path.dirname(__file__)的用法,其主要总结起来有:
1)不要已命令行的形式来进行os.path.dirname(__file__)这种形式来使用这个函数
2)结合os.path.abspath()使用
import os def file_path():
root_path = os.path.dirname(os.path.abspath(__file__))
project_path = root_path[:root_path.rfind("requests") + len("requests")]
return project_path
2.log.py文件如下:
os.path.join(path, 'log') 是指将path和 log字符串组合成文件目录,比如最终结果为 F:\requests\log
import logbook
import os
from logbook.more import ColorizedStderrHandler
from tools.path import file_path path = file_path()
LOG_DIR = os.path.join(path, 'log')
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR) # 如果log不存在,在当前路径下创建一个log文件夹, def get_logger(name='Test', file_log=True, level=''):
logbook.set_datetime_format('local') ColorizedStderrHandler(bubble=False, level=level).push_thread()
if file_log:
logbook.TimedRotatingFileHandler(os.path.join(LOG_DIR, '%s.log' % name),
date_format='%Y-%m-%d-%H', bubble=True, encoding='utf-8').push_thread()
return logbook.Logger(name)
LOG = get_logger(file_log=True, level='INFO') if __name__ == "__main__":
LOG.error('Log-info')
3. 接口用例执行中调用log文件
此处先说一个接口调用,有两种类库,urllib2 和requests
urllib2 处理编码太麻烦,比起来还是选择简洁明快的requests
Requests 使用的是 urllib3,继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自 动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
Requests的使用相当简单,直接用requests.post(url,data),可见下面的例子
import requests def old_login(): # 登陆接口
url = "https://*****/api/login"
params = {
"cc": "",
"phone": "1771019****",
"password": ""
}
res = requests.post(url, data=params)
print(res.text) # 登陆后查看账号信息
url2 = "https://*****/api/account"
r = requests.get(url2)
print("账号信息是:", r.text) old_login()
# 返回结果如下:{"code":0,"msg":null,"data":{"uid":"5adf5c6a267f40448bb5b0022db94af7","name":"王元元","type":"NORMAL"}}
# 账号信息是: {"code":-4001,"msg":"登录token无效","data":null}
# 第二条因为没有获取到session,登陆态,导致报错
可以看到,当第二条请求的接口需要登录态,但是无法获取,此时requests有个特别棒的功能是 可以直接使用
requests.session() 保存登录态
具体可见下面:
import requests
from tools import log class Msg:
def __init__(self):
self.Log = log.LOG
self.session = requests.session() def msg_get(self,url):
get_msg = self.session.get(url=url)
self.Log.info("code:"+str(get_msg.status_code))
self.Log.info("time:"+str(get_msg.elapsed.microseconds/1000)+"ms") # 获取接口响应的时间
self.Log.info(get_msg.text) def msg_post(self, url, data):
post_msg = self.session.post(url=url, data=data)
self.Log.info("code:"+str(post_msg.status_code))
self.Log.info("time:"+str(post_msg.elapsed.microseconds/1000)+"ms")
self.Log.info(post_msg.text) msg = Msg()
data = {
"cc": "",
"phone": "1771019***",
"password": "1q2"
}
msg.msg_post(url= "https://*****/api/login",data=data )
msg.msg_get(url="https://****/api/account")
以上,over ~
python 接口测试1 --如何创建和打印日志文件的更多相关文章
- Log4j配置的经典总结,打印日志文件,日志存库
一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...
- PDFBox创建并打印PDF文件, 以及缩放问题的处理.
PDFBox带了一些很方便的API, 可以直接创建 读取 编辑 打印PDF文件. 创建PDF文件 public static byte[] createHelloPDF() { ByteArrayOu ...
- 转载:c++打印日志文件的一个模板
转载地址:http://blog.csdn.net/huangyifei_1111/article/details/52134914 NetDataLog.h #ifndef NETDATALOG_H ...
- 【python】中文的输出,打印,文件编码问题解决方法
直接在python中输入中文的字符串会报编译错误SyntaxError: Non-ASCII character,因为python文件默认编码方式是ASCII.如果想要打印中文字符,有两种方式: 1. ...
- java最简单实现Log打印和生成日志文件
导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...
- 利用log4net创建日志文件时过滤日志,这是坑还是?
前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...
- 如何在Centos 7上用Logrotate管理日志文件
何为Logrotate? Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理. Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间. L ...
- [转]Linux日志文件总管——logrotate
FROM : https://linux.cn/article-4126-1.html 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文 ...
- linux之使用cron,logrotate管理日志文件
1) logrotate配置 logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”. 我们可以根据日志文件的大小,也可以根据其天数来 ...
随机推荐
- Fedora删除旧版本内核
由于Fedora升级非常快,因此非常有必要清除陈旧的内核,否则的话,每次登录系统会出现多个引导项,看着烦人也占用内存: 1.查看当前使用的内核 [root@w ~]# uname -r 4.9.14- ...
- 【SQL*PLUS】常规使用
登陆SQL*PLUS sqlplus sys/Manager123 as sysdba 创建数据库实例并挂载数据库,此时加载数据库文件,但数据表不能访问. SQL>startup mount; ...
- C语言指针(二)指向指针的指针
注意:指向指针的指针适合于做链表 1.声明方式:在变量名前放置两个*符号 int**var; 2.实例: #include<stdio.h>int main (){intvar;int*p ...
- 开发流程和Maven的配置
按照何种开发模型? V模型:项目需求--->概要设计(功能模块) --->详细设计(页面的设计,数据库的设计) --->编码(框架的搭建,功能的实现)---->测试(单元测试, ...
- JAVA通过I/O流复制文件
JAVA通过I/O流复制文件 本文是对字节流操作,可以多音频视频文件进行操作,亲测有效. 个人感觉这个东西就是靠记的, 没什么好解释的,,,, import java.io.File; import ...
- cacti监控系统
cacti 1. cacti安装 IP: 172.25.44.1 环境: Red Hat 6.5 镜像: rhel-server-6.5-x86_64-dvd.iso 火墙: /etc/init.d/ ...
- [2013-06-05]bat脚本设置DNS
有时候需要切换本机dns,将网络环境转至测试环境 @echo off netsh interface ip set dns name="本地连接" source=static ad ...
- 用PyCharm执行测试成功但无法生成HTMLTestRunner报告
问题:代码写的没问题,执行也成功了,但就是无法生成HTMLTestRunner的报告 其实这是编辑器搞得鬼,编辑器为了方便用户执行测试,都有一项功能,可以用编辑器来调用unittest或者nose来执 ...
- java面向对象(五)之多态
多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...
- 将位图导入为ArcGIS面要素
本文根据笔者经验,介绍一种从位图图像导入ArcGIS称为要素的方法.这种方法适用于从现有出版物图片中获取地理信息的情况. 首先要说明的是,从位图导入要素是非常非常不精确的方式,如果有其它数据来源,那么 ...