• 【App自动化测试】(十一)自动化关键数据记录



    前言
    本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘

    在我们进行自动化测试的时候,为了能够了解测试脚本运行情况,我们会对一些关键数据进行记录,如果后续运行出现问题通过这些记录会 更加方便定位。主要记录关键数据的是数段有:添加行为日志、添加截图等等。

    1. 添加行为日志

    • 使用 python 自带的 logging 模块
    • 使用 pytest.ini 配置日志开关与格式
    • 参考链接

    pytest.ini 配置日志开关与格式的模板:

    [pytest]
    ;日志开关 true false
    log_cli =true
    ;日志级别
    log_cli_level = info
    ;打印详细日志,相当于命令行加 -vs
    addopts = --capture=no
    ;日志格式
    log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
    ;日志时间格式
    log_cli_date_format = %Y-%m-%d %H:%M:%S
    ;日志文件位置
    log_file = ./log/test.log
    ;日志文件等级
    log_file_level = info
    ;日志文件格式
    log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
    ;日志文件日期格式
    log_file_date_format = %Y-%m-%d %H:%M:%S
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2. 添加截图

    方法名描述
    get_screenshot_as_file(filename)保存图片为.png 格式,filename 图片路径
    save_screenshot(filename)保存图片为.png 格式,filename 图片路径
    get_screenshot_as_png()保存图片为二进制格式
    get_screenshot_as_base64()将图片保存为 base64 格式。通常用在 html 里添加截图

    想改写报告的话,可以把图片保存为base64的格式,然后添加在html中。

    3. 获取页面源码

    • 通过获取页面源码,分析页面的 dom 结构,比如toast这种短时间内就消失,无法使用工具抓取定位的情况下。
    • driver.page_source

    4. 示例代码

    4.1 示例说明

    被测程序:雪球APP

    测试步骤:

    1. 进入雪球主页
    2. 点击搜索框
    3. 输入搜索内容:alibaba

    关键数据记录方式:

    1. 添加行为日志
    2. 添加截图
    3. 在日志中记录页面源码

    4.2 添加行为日志相关配置

    4.2.1 添加pytest.ini

    注意:Windows系统下,ini文件中不能有中文字符;macOS和Linux可以。
    没有指定日志存放路径。因为路径在manage_logs这个fixture中定义了。

    [pytest]
    
    log_cli =true
    
    log_cli_level = info
    
    addopts = --capture=no
    
    log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
    
    log_cli_date_format = %Y-%m-%d %H:%M:%S
    
    log_file_level = info
    
    log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
    
    log_file_date_format = %Y-%m-%d %H:%M:%S
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4.2.2 添加conftest.py

    在conftest.py中新增一个manage_logs的fixture,这样可以生成的日志文件名是动态的时间。

    import time
    import pytest
    
    @pytest.fixture(scope="session", autouse=True)
    def manage_logs(request):
        """动态生成当前时间的日志名称"""
        now = time.strftime("%Y-%m-%d %H-%M-%S")
        log_name = '../appiumdemo/log/' + now + '.logs'
        request.config.pluginmanager.get_plugin("logging-plugin").set_log_path(log_name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.3 编写测试代码

    import logging
    from appium import webdriver
    from appium.webdriver.common.mobileby import MobileBy
    
    class TestXueQiu:
        def setup(self):
            desired_caps = {}
            desired_caps['platformName'] = 'Android'
            desired_caps['platformVersion'] = '6.0'
            desired_caps['deviceName'] = '127.0.0.1:7555'
            desired_caps['appPackage'] = 'com.xueqiu.android'
            desired_caps['appActivity'] = '.view.WelcomeActivityAlias'
            desired_caps['noReset'] = 'true'
            self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
            self.driver.implicitly_wait(10)
    
        def teardown(self):
            self.driver.quit()
    
        def test_search(self):
            #添加日志
            logging.info("搜索用例")
            element = self.driver.find_element(MobileBy.ID,"com.xueqiu.android:id/tv_search")
            search_enabled = element.is_enabled()
            print(f"搜索框的文本:{element.text},搜索框的坐标:{element.location},搜索框的size:{element.size}")
    
            if search_enabled == True:
    	    #添加日志
                logging.info("点击搜索框")
                element.click()
                #添加日志
                logging.info("输入搜索内容:alibaba")
                self.driver.find_element(MobileBy.ID,"com.xueqiu.android:id/search_input_text").send_keys("alibaba")
                alibaba_element = self.driver.find_element(MobileBy.XPATH, "//*[@text='阿里巴巴']")
                displayed = alibaba_element.get_attribute("displayed")
                logging.info(f"元素是否可见:{displayed}")
                #日志中保存页面源码:一般定位问题的时候使用
                logging.info("所有页面的页面源码为:"+self.driver.page_source)
    	    #进行搜索结果截图
                self.driver.save_screenshot("../appiumdemo/images/search_result.png")
                assert displayed == "true"
            else:
                assert False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    文末说明:
    接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?

    快来跟我一起看,一篇文章让你了解三者的区别。😎
    ⬇⬇⬇⬇⬇⬇⬇
    👍👍👍:接口测试经典面试题:Session、cookie、token有什么区别?

  • 相关阅读:
    西门子S7-200 SMART(6ES7 288-1ST40-0AA0)相关与晨控智能CK-FR08-E00关于modbus tcp 通信配置指南
    在AndroidR user版本的设备上,如何默认打开USB调试,如何去掉USB调试确认弹窗
    MemFire案例-政务应急物联网实时监测预警项目
    前端体验优化(4)——数据
    [论文笔记]MobileBERT
    杰理-判断经典蓝牙是否在打开状态
    环境主题静态HTML网页作业作品 大学生环保网页设计制作成品 简单DIV CSS布局网站
    js的sort()函数
    k8s day03
    OneTab和BdTab的标签管理对比
  • 原文地址:https://blog.csdn.net/gjj920318/article/details/127996865