pytest3

log模块,即加个log.py文件

import  logging

logging.debug('调试日志')
logging.info('消息日志')
logging.warning('警告日志')
logging.error('错误日志')
logging.critical('严重错误日志')
# 从上到下等级越来越高,debug等级最低,critical等级最高,默认warning、error、critical才会打印,debug和info不会打印
#utils/log_utils
import logging
import os
import time

root_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
print(root_path)
log_path = os.path.join(root_path, 'log')
print(log_path)


class Logger:
    def __init__(self):
        # 定义日志位置和文件名
        self.logname = os.path.join(log_path, "{}.log".format(time.strftime("%Y-%m-%d")))
        # 定义一个日志容器
        self.logger = logging.getLogger("log")
        # 设置日志打印的级别
        self.logger.setLevel(logging.DEBUG)
        # 创建日志输入的格式
        self.formater = logging.Formatter('[%(asctime)s][%(filename)s %(lineno)d][%(levelname)s]: %(message)s')
        # 创建日志处理器,用来存放日志文件
        self.filelogger = logging.FileHandler(self.logname, mode='a', encoding="UTF-8")
        # 创建日志处理器,在控制台打印
        self.console = logging.StreamHandler()
        # 设置控制台打印日志级别
        self.console.setLevel(logging.DEBUG)
        # 文件存放日志级别
        self.filelogger.setLevel(logging.DEBUG)
        # 文件存放日志格式
        self.filelogger.setFormatter(self.formater)
        # 控制台打印日志格式
        self.console.setFormatter(self.formater)
        # 将日志输出渠道添加到日志收集器中
        self.logger.addHandler(self.filelogger)
        self.logger.addHandler(self.console)

logger = Logger().logger

if __name__ == '__main__':
    logger.debug('调试日志')
    logger.info('消息日志')
    logger.warning('警告日志')
    logger.error('错误日志')
    logger.critical('严重错误日志')
    logger.info("---测试开始---")
    logger.debug("---测试结束---")

抄上面这个Logger即可,需要按照需求调整里面的路径path

 

allure报告

1、安装allure-pytest

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple allure-pytest

 

装java,配置java的环境变量,cmd运行java,cmd运行javac都行的话说明弄好了

2、下载allure命令行工具,添加到环境变量的path中

allure是一个命令行工具,需要去github上下载最新版https://github.com/allure-framework/allure2/releases

下载安装包并解压到自己电脑某个文件夹,然后再复制allure的bin路径,添加到环境变量的path中,cmd运行allure --version能行就弄好了 

3、配置pytest.ini

addopts =
    -vs
    --alluredir ./report
#设置执行pytest运行测试用例时默认的参数,-q简略
#--alluredir ./report 在此文件的上一级下生成report文件夹存放allure生成的的json和text文件,直接在测试用例那点三角运行会以测试用例文件找上一级,用Terminal命令行则以本ini文件找上一级,所以用命令行运行测试文件

不然就得运行完用例后,在终端运行如下命令

 

5、在Terminal用命令行运行测试用例,生成report文件夹存放allure生成的的json和text文件

pytest testcases/test_case_optimize/case_optimize.py

6、两个方式打开报告

  在Terminal/cmd运行allure的serve命令

allure serve ./report #./report指想要打开报告的那个文件夹目录,cmd写绝对路径,terminal写绝对路径/根据pytest.ini文件内配置好的testpaths写相对路径  

  在Terminal运行allure的generate命令

allure generate report 
#1、生成报告,默认生成的文件夹名叫allure-report,想换个名字的话就allure generate report -o new

allure open allure-report
#2、打开生成报告的文件夹

 

allure具体用法

#testcases/test_case_optimize/case_optimize_class.py
import allure
import requests
import pytest

from api.api import mobile_query
from utils.read import base_data

url = base_data.read_ini()['host']['api_sit_url']
@allure.epic("数据进制项目epic")#这条和下面那条都只能写在测试类外,其他写在测试类里
@allure.feature("手机号模块feature")
class TestMobile:
    @allure.story("杭州的手机号story")
    @allure.title("测试手机号归属地title")
    @allure.testcase("http://www.baidu.com",name="接口地址testcase")
    @allure.issue("http://www.baidu.com",name="缺陷地址issue")
    @allure.link("http://www.baidu.com", name="链接地址link")
    @allure.description("当前手机号是13456755448,归属地是杭州的description")
    @allure.step("先进行归属地的操作step")
    @allure.severity("critical")
    def test_mobile(self):
        param = base_data.read_data()["mobile_belong"]
        result = mobile_query(param)
        assert result.success is True
        assert result.body['status'] == 0
        assert result.body['msg'] == "ok"
        assert result.body['result']["shouji"] == "13456755448"
        assert result.body['result']["province"] == "浙江"
        assert result.body['result']["city"] == "杭州"
        assert result.body['result']["company"] == "中国移动"
        assert result.body['result']["cardtype"] is None
        assert result.body['result']["areacode"] == "0571"

        @allure.story("杭州的手机号story")
        @allure.title("测试手机号归属地title")
        @allure.testcase("http://www.baidu.com", name="接口地址testcase")
        @allure.issue("http://www.baidu.com", name="缺陷地址issue")
        @allure.link("http://www.baidu.com", name="链接地址link")
        @allure.description("当前手机号是13456755448,归属地是杭州的description")
        @allure.step("先进行归属地的操作step")
        @allure.severity("critical")
        def test_mobile_dynamic(self):
            param = base_data.read_data()["mobile_belong_dynamic"]["params"]
            title = base_data.read_data()["mobile_belong_dynamic"]["title"]
            story = base_data.read_data()["mobile_belong_dynamic"]["story"]
            allure.dynamic.story(story)#@的()只能写字符串且写在函数外,直接allure.dynamic的里面可以写变量且写在函数内,两者功能一样
            allure.dynamic.title(title)
            result = mobile_query(param)
            assert result.body['status'] == 0
            assert result.body['msg'] == "ok"
            assert result.body['result']["shouji"] == "13456755448"
            assert result.body['result']["province"] == "浙江"
            assert result.body['result']["city"] == "杭州"
            assert result.body['result']["company"] == "中国移动"
            assert result.body['result']["cardtype"] is None
            assert result.body['result']["areacode"] == "0571"

if __name__ == '__main__':
    pytest.main()

 写好代码后,再进行第五步运行测试用例和第六步打开报告即可在allure网页上看到变动

allure添加环境信息

1、通过第五步,以命令行运行测试用例生成的report文件夹内,新建一个文件:environment.properties,此文件名是固定的

2、按照自己想法想写什么写什么,想写多少写多少,格式如下,但内容不局限,注意等号前后不能有空格,不能是中文

author=yun
version=5.0
yuming=http://www.baidu.com
environment=pro

3、再进行第六步打开报告即可

allure功能展示测试用例的参数展示删除

一开始的参数展示如下:

 删除参数展示的步骤:

 在项目文件中找到External Libraries/<Python 3.8 (项目名)>/site-packages/allure_pytest/listener.py

在 def pytest_runtest_setup(self, item)里的最后找到test_result.parameters.extend,即如下的灰色部分,注释掉

 再运行测试用例生成报告,启动报告即可。

但对于我的allure来说,删除参数是成功了,但现实测试条数也跟着少了_(:з」∠)_可是版本也不高啊,所以我还是别删了。_(:з」∠)_

 

posted @ 2023-09-15 00:06  云啊云的囤粮地  阅读(9)  评论(0编辑  收藏  举报