首页 > 技术文章 > pytest如何输出日志信息

gmjianchi 2020-06-03 18:33 原文

        我们在学习或调试过程中,测试用例的调试信息都非常有用,可以让我们知道现在的运行情况,执行到哪步以及相应的出错信息等,可以在pytest里面,有时并不会输出所有信息,比如默认情况下pass的测试用例是没有print输出的,本文主要就是解决这个问题。

 

一、用print输出log信息

  我们在编写简单的Python程序时,往往可以通过print()打印输出信息,从而检测是否达到预期需求。但是在pytest中,往往成功的测试用例直接显示为pass,只有错误的测试用例才会有相应的错误信息,但是有时用例虽然执行成功,但结果是否是我们需要的。如:自动化接口测试时,测试用例执行成功了,但是接口的返回数据是否正确?

  这时可以用‘-s’参数或者 ‘--capture=no’,这样就可以输出所有测试用的print信息。但是pytest还是会等着所有的测试用例都执行完毕才会显示运行结果。

import requests
from  test_aqjr.sm4decode import sm4encrype, getmd5, sm4decrypt
from test_aqjr.readconfig import base_data
from test_aqjr.logger import logger

def test_time_sync():
    # 接口未加密部分的URL
    base_time_sync_url = base_data.time_sync_url
    # 请求参数
    data = {
        "PartnerId": base_data.partnerid,
        "TimeStamp": base_data.timestamp,
        "SerialNum": base_data.serialnum,
        "Version": base_data.version,
        "Token": base_data.token,
        "ReqContent": {
        }
    }
    # 请求数据通过秘钥加密加密
    r = sm4encrype(base_data.old_key, str(data))
    print("请求参数加密的结果:%s" % r)
    # hash值
    hash = getmd5(r)
    # 发送的url
    url = base_time_sync_url + hash
    print("通过hash加密后的URL:%s" % url)
    # 基于HTTP协议的POST请求
    response = requests.post(url, r)
    # 响应结果通过秘钥解密
    e = sm4decrypt(base_data.old_key, response.content)
    print("返回的响应结果:%s" % e)

pytest -s -v test_time_sync.py 或 pytest --capture=no -v test_time_sync.py

 

 二、在pytest中用logging代替print

  像一些复杂的程序或框架,特别是一些大型的程序,我们想要通过调试信息了解程序的运行情况,python提供了一个日志模块logging,它可以把我们想要的信息全部保存到一个日志文件中,方便查看。
  
import requests
from  test_aqjr.sm4decode import sm4encrype, getmd5, sm4decrypt
from test_aqjr.readconfig import base_data
from test_aqjr.logger import Logger


def test_time_sync():
    # 接口未加密部分的URL
    base_time_sync_url = base_data.time_sync_url
    # 请求参数
    data = {
        "PartnerId": base_data.partnerid,
        "TimeStamp": base_data.timestamp,
        "SerialNum": base_data.serialnum,
        "Version": base_data.version,
        "Token": base_data.token,
        "ReqContent": {
        }
    }
    logger = Logger(logger="test_time_sync").getlog()
    # 请求数据通过秘钥加密加密
    r = sm4encrype(base_data.old_key, str(data))
    logger.info("请求参数加密的结果:%s" % r)
    # hash值
    hash = getmd5(r)
    # 发送的url
    url = base_time_sync_url + hash
    logger.info("通过hash加密后的URL:%s" % url)
    # 基于HTTP协议的POST请求
    response = requests.post(url, r)
    # 响应结果通过秘钥解密
    e = sm4decrypt(base_data.old_key, response.content)
    logger.info("返回的响应结果:%s" % e)

  

 

 

 

 




推荐阅读