CN117648257A - 一种Linux操作***下的Web自动化测试方法及*** - Google Patents

一种Linux操作***下的Web自动化测试方法及*** Download PDF

Info

Publication number
CN117648257A
CN117648257A CN202311667759.0A CN202311667759A CN117648257A CN 117648257 A CN117648257 A CN 117648257A CN 202311667759 A CN202311667759 A CN 202311667759A CN 117648257 A CN117648257 A CN 117648257A
Authority
CN
China
Prior art keywords
test
log
file
testcase
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311667759.0A
Other languages
English (en)
Inventor
张富宏
李金丽
陈吉兰
魏俊华
肖寒
吕杉杉
赵文静
王巧丽
李坚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kirin Software Co Ltd
Original Assignee
Kirin Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202311667759.0A priority Critical patent/CN117648257A/zh
Publication of CN117648257A publication Critical patent/CN117648257A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种Linux操作***下的Web自动化测试方法及***,本发明方法包括采用通过自动化测试工具playwright的功能插件所构建的参数化框架生成Web页面的测试框架pytest的测试代码以用于Web自动化测试,所述参数化框架中的功能模块中注册有对应自定义命令的函数逻辑且采用测试框架pytest的外壳函数实现函数逻辑的上下文逻辑操作,且所述参数化框架在收到自定义命令及其参数后将对应的函数逻辑作为夹具函数直接被用例模块作为参数调用或者作为配置模块被调用至指定的配置文件中。本发明旨在提高用例开发的并行性和开发效率,降低设计开发难度,缩短开发周期,增强用例的可运行性、可测试性和可维护性。

Description

一种Linux操作***下的Web自动化测试方法及***
技术领域
本发明涉及软件测试技术领域,具体涉及一种Linux操作***下的Web自动化测试方法及***。
背景技术
随着互联网的快速发展,基于B/S的Web应用***逐渐取代了C/S应用***,用户只需浏览器就可以进行业务处理,也就是说现在的Web应用要安全及时地服务于大量的客户端用户,所以对Web应用的质量要求也越来越高,Web应用的测试显得尤为重要。目前Linux操作***生态越来越丰富,开发环境也越来越健全,越来越多的Web应用***迁移到Linux操作***上,但基于Linux操作***的Web自动化测试工具几乎没有。因此,开发基于Linux操作***的Web自动化测试工具十分有必要。由于Web应用***具有分布、异构、并发和平台无关的特性,Web应用测试相比普通程序的测试要复杂的多,单靠手工测试远远不够,有必要引入自动化测试,一是提高测试效率,二是保障测试的完整性。目前流行广泛的Web自动化大部分基于Selenium的测试框架,但是该测试框架运行在Windows的开发环境下,而且Selenium在执行脚本回放和处理时稳定性和可靠性很差,速度太慢,对配置要求苛刻、脚本回放稳定性差,需要人工后期进行大量的编码加工,且所生成的测试报告信息量冗余。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种Linux操作***下的Web自动化测试方法及***,本发明旨在提高用例开发的并行性和开发效率,降低设计开发难度,缩短开发周期,增强用例的可运行性、可测试性和可维护性。
为了解决上述技术问题,本发明采用的技术方案为:
一种Linux操作***下的Web自动化测试方法,包括采用通过自动化测试工具playwright的功能插件所构建的参数化框架生成Web页面的测试框架pytest的测试代码以用于Web自动化测试,所述参数化框架中的功能模块中注册有对应自定义命令的函数逻辑且采用测试框架pytest的外壳函数@pytest.fixture实现函数逻辑的上下文逻辑操作,且所述参数化框架在收到自定义命令及其参数后将对应的函数逻辑作为夹具函数直接被用例模块作为参数调用或者作为配置模块被调用至指定的配置文件conftest.py中。
可选地,所述参数化框架中的功能模块包括用于提供包括保持操作登录状态、获取后端接口数据并处理、日志信息打印保存和用例变量参数化的公共函数API的可复用API,所述参数化框架调用可复用API的处理步骤包括:
S101,根据cookie文件检查是否处于登陆状态,若处于登陆状态,则跳转步骤S102;否则,执行登陆操作生成新的cookie文件以保存登陆状态的信息;
S102,读取预设的配置文件config.ini中的IP地址和请求头head的信息,根据IP地址和请求头head的信息发出Get请求获取对应的后端接口数据,通过数据分析函数对后端接口数据处理得到实际测试中测试用例TestCase需要使用的数据内容及格式以作为测试用例中断言判断、输入框的数据参数使用;获取用于记录测试用例TestCase中通用配置和参数且以json格式保存信息的用例变量参数化文件,并通过json格式读取函数get_json读取用例变量参数化文件中的数据,调用测试用例TestCase需要使用的数据内容及格式以及从用例变量参数化文件中获取的数据生成测试用例TestCase并执行测试;
S103,调用日志生成器记录测试用例TestCase的执行结果;
S104,将测试用例TestCase的信息和执行结果保存到日志文件log中;
S105,结束。
可选地,步骤S102中执行测试是通过测试用例驱动run.py实现的,所述测试用例驱动run.py调用测试用例TestCase执行测试包括:
S201,打印开始测试的信息;
S202,初始化测试报告目录,定义测试结果报告的生成目录、名称和格式;
S203,判断传入模块名称参数是否成立,若成立则判定仅需执行测试用例TestCase中传入模块名称参数对应的模块用例,否则需执行测试用例TestCase中所有的模块用例;
S204,判断测试用例TestCase的运行模式为有头模式headed还是无头模式headless,有头模式headed表示测试用例TestCase的执行过程中显示浏览器图形界面,无头模式headless表示测试用例TestCase的执行过程中不显示浏览器图形界面;
S205,判断是否收到参数化框架收到指定的自定义命令及其参数,若收到指定的自定义命令及其参数,则将测试用例TestCase使用自定义命令传入的参数代替测试环境配置config.py中的参数,否则直接使用测试环境配置config.py中的参数;
S206,控制测试用例TestCase中的指定的模块用例、以指定的运行模式以及测试环境配置config.py中的参数执行测试,在所有的模块用例执行测试完毕后跳转步骤S207;
S207,打印输出测试结束并生成测试报告的信息。
可选地,步骤S102之前还包括生成测试用例TestCase:
S301,新增测试用例TestCase的脚本文件并打开在新建的页面中;
S302,抓取被测试的Web页面的元素并在脚本文件中生成对应的测试代码;
S303,在脚本文件中导入测试用例TestCase所需的公共函数模块;
S304,在脚本文件中添加测试用例TestCase的注释信息,测试用例TestCase的注释信息包括用例名称、测试步骤、预期结果;
S305,在脚本文件中添加断言,所述断言用于控制测试用例TestCase的执行以及日志生成器进行日志记录,若断言的结果为真,则继续执行、并调用日志生成器在日志中打印用例执行成功信息;若断言结果为假,则抛出异常、并调用日志生成器在日志中打印错误信息;
S306,关闭测试用例TestCase的脚本文件的页面以减少资源占用。
可选地,步骤S103中调用日志生成器记录测试用例TestCase的执行结果之前,还包括创建日志生成器:
S401,创建日志生成器类;
S402,设置基础日志等级,所述基础日志等级为调试debug、信息info、警告warning、错误error和关键critical五种日志等级中的一种;
S403,从配置文件config获取文件路径,并根据获取的文件路径定义输出日志文件filename的路径及名称;
S404,定义日志文件切割规则;
S405,定义日志输出格式;
S406,定义均继承日志过滤方法logging.Filter的两个过滤器Filter,一个过滤器Filter用于过滤日志等级名称levename大于等于错误error的日志,另一个一个过滤器Filter用于过滤输出信息有字符串‘false’的日志,两个过滤器为嵌套关系;
S407,定义过滤日志路径及切割规则,以用于将过滤后的日志保存在过滤日志路径下。
可选地,所述参数化框架中的功能模块包括用于基于构建报告和日志格式的配置文件conftest.py将测试结果的展示进行处理生成测试报告的测试报告模块,所述测试报告模块用于将测试用例TestCase的脚本文件中的注释信息传入描述函数description(),通过描述函数description()处理后展示在报告的描述description中。
可选地,所述测试报告模块生成测试包括:
S501,确定测试结果的展示需求,包括测试报告的名称、路径、测试数据的统计方法以及每条执行用例的展示内容;
S502,设置测试报告路径和名称;
S503,在测试报告中添加以指定命名的表格,并写入测试环境信息,以及以指定命名的结果统计表格;
S504,遍历执行测试用例列表,若遍历完毕则跳转步骤S509;否则跳转步骤S505;
S505,获取遍历得到的当前测试用例TestCase的测试结果;
S506,调用配置文件conftest.py获取当前测试用例TestCase的注释信息和失败截图;
S507,调用时间统计函数计算当前测试用例TestCase的会话结束和开始时间之差,获取到当前测试用例TestCase的执行总时间;
S508,将当前测试用例TestCase的信息写入所述结果统计表格中,跳转步骤S504;
S509,根据测试结果的展示需求生成测试报告,结束并退出。
可选地,步骤S502中设置测试报告的路径和名称时,测试报告的路径为当前目录、测试时间命名目录、测试报告名称三者的组合得到的名称,且其中当前目录通过调用config.py文件获取,测试时间命名目录为使用格式化时间函数得到。
此外,本发明还提供一种Linux操作***下的Web自动化测试***,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述Linux操作***下的Web自动化测试方法。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述Linux操作***下的Web自动化测试方法。
和现有技术相比,本发明主要具有下述优点:
1、本发明包括采用通过自动化测试工具playwright的功能插件所构建的参数化框架生成Web页面的测试框架pytest的测试代码以用于Web自动化测试,所述参数化框架中的功能模块中注册有对应自定义命令的函数逻辑且采用测试框架pytest的外壳函数@pytest.fixture实现函数逻辑的上下文逻辑操作,且所述参数化框架在收到自定义命令及其参数后将对应的函数逻辑作为夹具函数直接被用例模块作为参数调用或者作为配置模块被调用至指定的配置文件conftest.py中,通过构建基于playwright的参数化框架,能够提高用例开发的并行性和开发效率,降低设计开发难度,缩短开发周期,增强用例的可运行性、可测试性和可维护性,降低了测试人工成本,为Linux操作***Web应用提供了简单、可靠的自动化测试工具,尤其在发版频繁的情况下,极大降低了测试成本,提高了测试效率。
2、本发明能够在包括麒麟操作***在内的各类Linux操作***上稳定运行,而且能够适配多种CPU架构,比如鲲鹏、飞腾、海光、兆芯、龙芯等,解决了Linux操作***的Web自动化测试问题。
附图说明
图1为本发明实施例中参数化框架的结构示意图。
图2为本发明实施例中可复用API的执行流程示意图。
图3为本发明实施例中测试用例驱动run.py的执行流程示意图。
图4为本发明实施例中新增测试用例的流程示意图。
图5为本发明实施例中创建日志生成器的流程示意图。
图6为本发明实施例中生成测试报告的流程示意图。
具体实施方式
本实施例提供一种Linux操作***下的Web自动化测试方法,包括采用通过自动化测试工具playwright的功能插件所构建的参数化框架(参数化测试工具)生成Web页面的测试框架pytest的测试代码以用于Web自动化测试,所述参数化框架中的功能模块中注册有对应自定义命令的函数逻辑且采用测试框架pytest的外壳函数@pytest.fixture实现函数逻辑的上下文逻辑操作,且所述参数化框架在收到自定义命令及其参数后将对应的函数逻辑作为夹具函数直接被用例模块作为参数调用或者作为配置模块被调用至指定的配置文件conftest.py中。本实施例Linux操作***下的Web自动化测试方法实现了一种pytest和playwright的插件式集成,playwright作为一款功能强大的自动化测试工具,在存在大量既定参数的测试情况下由于缺少参数化的能力,导致测试框架会有代码冗余、操作不便的诸多问题,为解决这一问题,可以编写基于playwright和参数化功能的插件,构建基于playwright的参数化框架,提高用例开发的并行性和开发效率,降低设计开发难度,缩短开发周期,增强用例的可运行性、可测试性和可维护性。除此之外,基于python的测试框架可以结合多种python库,使框架功能更加丰富强大,同时国产麒麟操作***的多种国产CPU架构,均对python进行支持,因此该工具可在国产麒麟操作***鲲鹏、飞腾、海光、兆芯、龙芯等平台稳定运行。
本实施例中功能插件的整体设计思路为自定义命令行参数,将自定义命令行参数传入函数中,编写函数逻辑,用pytest的@pytest.fixture实现该函数的上下文逻辑操作,该插件中的函数可以作为夹具函数直接被用例模块作为参数调用,还可以作为配置模块被调用至配置文件,实现了代码的高内聚低耦合,以及提高代码的复用性,不需要在不同pytest项目中对conftest文件反复添加修改相同的内容,可以根据项目特点开发通用的插件,打包上传至网络供类似项目使用。在插件中调用所需各种库,例如:asyncio、os、AbstractEventLoop、typing、pytest、playwright.sync_API等库,可以使用库中现有的功能实现所需异步、文件定位、文件删除、测试等功能。使用pytest_addoption()方法注册一些需要的自定义命令行参数,例如浏览器引擎自定义命令为:
此处的参数--browser为浏览器引擎设置,action="append"表示新增动作,default=[]表示默认浏览器引擎为空,help="Browser engine which should beused"为输出的提示文字,choices=["chromium","firefox","webkit"]表示"chromium","firefox","webkit"三种浏览器引擎为可选的浏览器引擎。将自定义参数--browser利用方法getoption传入函数browser_name,并编辑所需逻辑:
其中,def为定义函数browser_name的方法,len(browser_names)为获取函数browser_name的返回值的长度,为0则返回指定的浏览器引擎"chromium",否则返回对应的数组元素browser_names[0]。"When using unittest.TestCase specifying multiplebrowsers is not supported"则为选择多浏览器引擎的情况下的警告信息。
使用@pytest.fixture实现函数的上下文操作,测试用例Test Case时利用内置fixture request获取命令行参数值,实现测试用例。
使用@pytest.fixture构造page夹具函数,写入依赖函数playwright中的BrowserContext函数的page方法,用yield实现上下文。将夹具函数传入用例函数的参数中实现调用:
调用:
def test_CompareExist(page:Page):
为了插件的流畅运行,可以使用pytest_generate_tests允许自定义参数化方案或扩展,利用@pytest.hookimpl来获取不同阶段用例的执行情况,设置返回一个执行结果对象和一个report对象,event_loop来实现异步执行,设置启动参数的格式函数browser_type_launch_args();除此之外还可以在此插件中设置头、登录等方法。
本发明测试工具的一些特有功能则在配置文件conftest.py中设置,在该文件中调用python的logging模块、xml模块等,在文件中可以编辑所需要的测试日志和测试报告的生成格式;在测试环境配置config.py中定义测试环境参数;在TestCase可以构建多级目录来管理测试用例,通过playwright的API抓取web应用的页面元素,并通过API记录手工测试步骤,生成UI页面的测试代码;将一些可复用API单独封装,实现框架的低耦合、可复用性,提高框架的安全性;最后编辑脚本文件(测试用例驱动run.py)批量执行命令行参数来驱动整个框架的执行。相比pytest直接构建的自动化测试代码,更加高效。在测试报告展示上,本发明可以实现用例的多级目录化展示,还可以设置用例的优先级,用户可以更加灵活的设置报告样式,以生成更加直观简洁的测试报告,便于对测试数据进行结果分析。
作为一种可选的实施方式,如图1所示,本实施例中参数化框架包括:测试用例TestCase、测试用例驱动run.py、测试环境配置config.py、测试报告report、日志logs、可复用API tools、测试数据Data和配置文件conftest.py,测试用例TestCase为参数化测试的执行对象,测试用例模块主要通过TestCase构建多级测试目录进行测试用例的管理,存放生成的测试用例文件。测试用例驱动run.py为测试用例TestCase的启动器,测试环境配置config.py用于保存测试环境的相关配置。测试报告report表示测试报告模块,主要是将测试结果的展示进行了个性化处理,用例执行结果的统计信息和详细信息可以快速索引,进一步生成更加直观简洁的测试报告。日志logs表示日志模块,主要用于管理测试过程中生成的日志文件,通过自定义日志等级、日志文件路径和名称、日志输出格式、日志文件切割规则。可复用APItools主要包括保持操作登录状态、获取后端接口数据并处理、日志信息打印保存和用例变量参数化等API。配置文件conftest.py用于格式设置、夹具函数类型指定。本实施例中,测试环境配置config.py中定义的默认参数及其注释内容如下:
#配置浏览器驱动类型(chromium,firefox,webkit)。
browser="chromium"
#运行模式(headless,headed)
mode="headed"
#失败重跑次数
rerun="0"#当达到最大失败数,停止执行
max_fail="5"
#项目目录配置
base_dir=os.path.dirname(os.path.abspath(__file__))
#报告路径
report_path=base_dir+"/report/"
#产品名称及版本号
product_name=""
#项目名(gitlab项目名称)
project_name=""
#测试报告地址(测试服务器ip地址+webserver端口号)
server_address=""。
如图2所示,本实施例参数化框架中的功能模块包括用于提供包括保持操作登录状态、获取后端接口数据并处理、日志信息打印保存和用例变量参数化的公共函数API的可复用API(即图1中的可复用API tools),参数化框架调用可复用API的处理步骤包括:
S101,根据cookie文件检查是否处于登陆状态,若处于登陆状态,则跳转步骤S102;否则,执行登陆操作生成新的cookie文件以保存登陆状态的信息;
S102,读取预设的配置文件config.ini中的IP地址和请求头head的信息,根据IP地址和请求头head的信息发出Get请求获取对应的后端接口数据,通过数据分析函数对后端接口数据处理得到实际测试中测试用例TestCase需要使用的数据内容及格式以作为测试用例中断言判断、输入框的数据参数使用;获取用于记录测试用例TestCase中通用配置和参数且以json格式保存信息的用例变量参数化文件,并通过json格式读取函数get_json读取用例变量参数化文件中的数据,调用测试用例TestCase需要使用的数据内容及格式以及从用例变量参数化文件中获取的数据生成测试用例TestCase并执行测试;
S103,调用日志生成器记录测试用例TestCase的执行结果;
S104,将测试用例TestCase的信息和执行结果保存到日志文件log中;
S105,结束。
本实施例中可复用API主要满足的功能有:保持操作登录状态、获取后端接口数据并处理、日志信息打印保存和用例变量参数化。具体如下:(1)保持操作登录状态:自动化测试过程中,所有操作都是在用户登录状态去执行的,通过获取用户登录状态下的cookie信息并保存在json格式文件,当用例执行时就会自动调用保持登录状态的cookie信息;而cookie是有时效性的,执行登出操作后cookie也会失效,后续用例就无法执行。该API在用例操作执行前判断cookie是否失效或用例执行时是否处于登录状态,若cookie失效就会自动执行登录操作生成新的cookie文件,保证后续用例处于登录状态执行操作。(2)获取后端接口数据并处理:读取配置文件config.ini中的ip和head请求信息,发出Get请求获取后端接口数据,通过数据分析函数处理得到实际测试中需要使用的数据内容及格式,作为断言判断、UI输入框中等操作的数据参数使用。(3)日志信息打印保存:用例执行的过程中调用日志函数,将用例信息、断言结果保存到log文件中。(4)用例变量参数化:测试用例中通用配置和参数以json格式保存,用例执行过程中根据需要调用函数读取文件中的信息,方便信息维护。
如图3所示,本实施例步骤S102中执行测试是通过测试用例驱动run.py实现的,所述测试用例驱动run.py调用测试用例TestCase执行测试包括:
S201,打印开始测试的信息;
S202,初始化测试报告目录,定义测试结果报告的生成目录、名称和格式;
S203,判断传入模块名称参数是否成立,若成立则判定仅需执行测试用例TestCase中传入模块名称参数对应的模块用例,否则需执行测试用例TestCase中所有的模块用例;
S204,判断测试用例TestCase的运行模式为有头模式headed还是无头模式headless,有头模式headed表示测试用例TestCase的执行过程中显示浏览器图形界面,无头模式headless表示测试用例TestCase的执行过程中不显示浏览器图形界面;
S205,判断是否收到参数化框架收到指定的自定义命令及其参数,若收到指定的自定义命令及其参数,则将测试用例TestCase使用自定义命令传入的参数代替测试环境配置config.py中的参数,否则直接使用测试环境配置config.py中的参数;
S206,控制测试用例TestCase中的指定的模块用例、以指定的运行模式以及测试环境配置config.py中的参数执行测试,在所有的模块用例执行测试完毕后跳转步骤S207;
S207,打印输出测试结束并生成测试报告的信息。
本实施例的参数化框架(参数化测试工具)在已有框架基础上,通过TestCase构建多级测试目录进行管理,在相应目录下创建test_*用例文件,通过引入工程包、导入公共函数、变量参数化、添加注释、断言等完善测试用例,并在最后关闭页面,释放资源,最终实现自动化测试用例的开发。如图4所示,本实施例步骤S102之前还包括生成测试用例TestCase:
S301,新增测试用例TestCase的脚本文件并打开在新建的页面中;本实施例中具体为新增test_*.py脚本文件,其中*可按需定义。根据web平台实际业务需求,在对应的目录下新增以test开头的脚本文件,否则获取测试用例列表时,将不会被识别到,该测试用例TestCase无法执行;
S302,抓取被测试的Web页面的元素并在脚本文件中生成对应的测试代码;本实施例中使用测试工具进行实际功能录制,通过抓取web应用页面元素,生成测试代码。使用本实施例开发的插件,修改生成的代码,将浏览器登录信息以及测试用例中通用配置和参数以json格式保存,用例执行过程中根据需要调用函数读取文件中的信息,实现对参数化代码的构建;
S303,在脚本文件中导入测试用例TestCase所需的公共函数模块;例如导入time、pytest、sys、os、GetLog等公共模块。通过调用os.path模块下的dirname(path)和abspath(path)方法获取测试用例文件路径,调用splitext(path)方法获取casename;通过调用GetLog模块下的get_log()实现日志信息的打印保存;Test Case模块,每个用例文件,将夹具函数page作为参数,可在用例中使用其对应的click、fill、press等方法;
S304,在脚本文件中添加测试用例TestCase的注释信息,测试用例TestCase的注释信息包括用例名称、测试步骤、预期结果;
S305,在脚本文件中添加断言,所述断言用于控制测试用例TestCase的执行以及日志生成器进行日志记录,若断言的结果为真,则继续执行、并调用日志生成器在日志中打印用例执行成功信息;若断言结果为假,则抛出异常、并调用日志生成器在日志中打印错误信息;例如本实施例中在用例脚本文件中,根据实际业务需求进行断言,调用get_log()进行日志输出。若断言结果为true,调用get_log().info在日志中打印用例执行成功信息;若断言结果为false,则抛出异常,调用get_log().error在日志中打印error信息;
S306,关闭测试用例TestCase的脚本文件的页面以减少资源占用。当前用例执行完成后,后续其它用例不会在该页面继续执行,为减少资源占用,需要将页面进行关闭。
本实施例的参数化框架(参数化测试工具)待测试完成后可自动生成可自定义日志,支持自定义日志等级、日志文件路径和名称、日志输出格式、日志文件切割规则等。此功能主要使用logging模块中来设计生成日志规则。如图5所示,本实施例步骤S103中调用日志生成器记录测试用例TestCase的执行结果之前,还包括创建日志生成器:
S401,创建日志生成器类;
S402,设置基础日志等级(使用setLevel函数),基础日志等级为调试debug、信息info、警告warning、错误error和关键critical五种日志等级中的一种;
S403,从配置文件config获取文件路径,并根据获取的文件路径定义输出日志文件filename的路径及名称,例如filename=PRO_PATH+os.sep+"logs"+os.sep+"uc.log",此时日志文件为PRO_PATH/logs/uc.log。
S404,定义日志文件切割规则;本实施例中具体为使用TimedRotatingFileHandler函数定义日志文件切割规则,例如设置参数为filename,when='midnight',interval=1,backupCount=7,encoding="utf-8",即每凌晨十二点切割一次,重新记录,每切割一次就会在当前日志文件夹新建一个uc.log.年-月-日的备份日志文件,默认保留7天的备份日志文件,默认编码为utf-8;
S405,定义日志输出格式;例如本实施例中具体为使用Formatter函数定义日志输出格式,例如设置参数为"%(asctime)s%(filename)s.%(funcName)s():line%(lineno)d[%(levelname)s]:%(message)s",即输出格式为“时间文件名称.函数名称:line代码行日志等级输出信息”;
S406,定义均继承日志过滤方法logging.Filter的两个过滤器Filter,一个过滤器Filter用于过滤日志等级名称levename大于等于错误error的日志,另一个一个过滤器Filter用于过滤输出信息有字符串‘false’的日志,两个过滤器为嵌套关系,本实施例中具体实现如下:
其中,class levelFilter(logging.filter)为定义第一个过滤器Filter的类,class falseFilter(logging.filter)为定义第二个过滤器Filter的类,def filter(self,record)为定义过滤器;If record.levelno>=logging.ERROR为第一个过滤器Filter的过滤条件,即过滤日志等级名称levename大于等于错误error的日志;ifrecord.msg.find(‘false’)==-1为第二个过滤器Filter的过滤条件,即过滤输出信息有字符串‘false’的日志;
S407,定义过滤日志路径及切割规则,以用于将过滤后的日志保存在过滤日志路径下。本实施例中,在日志生成器中定义一个新的路径,并定义一个新的handder对象,使用TimedRotatingFileHandler函数定义日志文件切割规则,例如设置参数为filename,when='midnight',interval=1,backupCount=7,encoding="utf-8",在这里传入新的路径,可以将过滤的日志内容写入此处。
创建日志生成器以后,日志生成器使用方法如下:在测试用例中实例化一个logger对象(logger=logging.getLog()),并将过滤器添加到logger中()logger.addFilter(falseFilter)。测试完成后,可以查看日志,跟踪定位问题;可以使用过滤器筛选想要等级的日志,进行一个算法检测,例如二八定律,推断出整个平台的质量。
本实施例的参数化框架(参数化测试工具)提供了一种个性化测试数据展示方法。本实施例方法主要涉及测试数据的处理与展示。在上述实施例的框架基础上,通过安装第三方插件及其依赖库,并配置自定义函数对测试结果的展示进行个性化处理,用例执行结果的统计信息和详细信息都可以快速索引,以进一步生成更加直观简洁的测试报告,便于测试工作人员对测试数据进行数据分析。如图1所示,本实施例中参数化框架中的功能模块包括用于基于构建报告和日志格式的配置文件conftest.py将测试结果的展示进行处理生成测试报告的测试报告模块(图1中表示为测试报告reports),测试报告模块用于将测试用例TestCase的脚本文件中的注释信息传入描述函数description(),通过描述函数description()处理后展示在报告的描述description中。如图6所示,测试报告模块生成测试包括:
S501,确定测试结果的展示需求,包括测试报告的名称、路径、测试数据的统计方法以及每条执行用例的展示内容;具体可结合实际web平台业务功能,设计测试报告的名称、路径、测试数据的统计方法以及每条执行用例的展示内容;
S502,设置测试报告路径和名称;
S503,在测试报告中添加以指定命名的表格,并写入测试环境信息,以及以指定命名的结果统计表格;例如本实施例中在测试报告中添加以“Web_Environment”命名的表格,并写入测试环境信息,以及以“WebInfo”命名的结果统计表格;
S504,遍历执行测试用例列表,若遍历完毕则跳转步骤S509;否则跳转步骤S505;
S505,获取遍历得到的当前测试用例TestCase的测试结果;
S506,调用配置文件conftest.py获取当前测试用例TestCase的注释信息和失败截图;
S507,调用时间统计函数计算当前测试用例TestCase的会话结束和开始时间之差,获取到当前测试用例TestCase的执行总时间;
S508,将当前测试用例TestCase的信息写入所述结果统计表格中,即以“WebInfo”命名的结果统计表格中,写入的数据信息包括执行结果、用例名称、用例描述信息、失败截图、用例执行时间;跳转步骤S504;
S509,根据测试结果的展示需求生成测试报告,结束并退出。
本实施例中步骤S502中设置测试报告的路径和名称时,测试报告的路径为当前目录、测试时间命名目录、测试报告名称三者的组合得到的名称,且其中当前目录通过调用config.py文件获取,测试时间命名目录为使用格式化时间函数得到。测试报告路径以多级目录的方式配置,具体为当前目录+测试时间命名目录+测试报告名称,比如base_dir/report/2022_05_20_09_30_00/TestReport.html;其中:
(1)当前目录通过调用config.py文件获取,涉及代码为:
#项目目录配置
base_dir=os.path.dirname(os.path.abspath(__file__))
#报告路径
report_path=base_dir+"/report/"。
(2)使用格式化时间函数获取当地时间为(%Y_%m_%d_%H_%M_%S)格式的命名目录,比如2022_05_20_09_30_00。
(3)参数“--html”可以同时指定html格式的测试报告路径和名称,比如“--htmlResultDir/TestReport.html”;参数“--junit-xml”可同时指定xml格式的测试报告路径和名称,比如“--junit-xml ResultDir/TestJunit-xml.xml”。若不指定测试报告路径,则默认生成到当前目录下。
本实施例中获取执行用例每项数据信息方法如下:(1)在文件plugin.py中定义了pass、skip、fail、error、xfail、xpass六种用例执行结果类型。每种执行结果的获取是通过添加自定义函数来实现,利用yield实现生成器函数,得到钩子方法的调用结果,并在此基础上调用get_result()方法获取执行用例的测试结果。(2)调用文件conftest.py获取用例描述信息、名称、失败截图。文件中自定义description()函数将用例中的描述信息转化为html对象,若执行过程出错,会抛出异常,描述信息列会显示“用例执行报错”。根据步骤(1)中的测试结果,对判断测试结果不是pass的,可获取失败截图并抛出异常,失败截图名称是以当前用例名称命名,路径在capture_screenshots()函数中设置,同时在报告中展示。(3)在配置文件conftest.py中调用了时间统计函数,通过计算该条执行用例会话结束和开始时间之差,获取到用例执行总时间。
综上所述,本实施例方法通过构建基于playwright的参数化框架,提高用例开发的并行性和开发效率,降低设计开发难度,缩短开发周期,增强用例的可运行性、可测试性和可维护性。在测试报告展示上,本实施例可以实现用例的多级目录化展示,还可以设置用例的优先级,用户可以更加灵活的设置报告样式,以生成更加直观简洁的测试报告,便于对测试数据进行结果分析。针对现有基于Selenium的自动化平台稳定性和可靠性很差的问题,本实施例构建基于playwright的参数化框架,生成UI页面的测试代码,降低了测试人员脚本开发的门槛。针对Web应用会存在调用同一方法的问题,将一些可复用API单独封装,实现框架的低耦合、可复用性,提高框架的安全性。针对现有自动化工具测试报告展示不友好的问题,本实施例的测试工具提供了一种个性化测试数据展示方法,可以实现用例的多级目录化展示,用户可以更加灵活的设置报告样式,生成的测试报告清晰明了,更加友好。本实施例的Web自动化测试工具,它具有开源、跨平台、跨浏览器、可移植性强等诸多优点。它不仅可以提供底层的基础测试功能,同样可以提供上层的测试环境配置、测试数据管理、测试用例管理、测试报告管理等功能,适用于大部分Web应用产品的自动化测试,主要原因是大部分Web应用产品测试均有跨平台、跨浏览器等需求。本实施例的Web自动化测试工具,降低了测试人工成本,为Linux操作***Web应用提供了简单、可靠的自动化测试工具,尤其在发版频繁的情况下,极大降低了测试成本,提高了测试效率。本实施例方法实现了一种pytest和playwright的插件式集成,构建基于playwright的参数化框架,提高了用例开发的并行性和开发效率,降低了设计开发难度,缩短了开发周期,增强了用例的可运行性、可测试性和可维护性。在测试报告展示上,本实施例可以实现用例的多级目录化展示,还可以设置用例的优先级,用户可以更加灵活的设置报告样式,以生成更加直观简洁的测试报告,便于对测试数据进行结果分析。本实施例方法具有可移植性强、安全性好、灵活性高等特征,可以稳定运行在Linux操作***上,支持多种CPU架构,比如鲲鹏、飞腾、海光、兆芯、龙芯等。
此外,本实施例还提供一种Linux操作***下的Web自动化测试***,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述Linux操作***下的Web自动化测试方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述Linux操作***下的Web自动化测试方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种Linux操作***下的Web自动化测试方法,其特征在于,包括采用通过自动化测试工具playwright的功能插件所构建的参数化框架生成Web页面的测试框架pytest的测试代码以用于Web自动化测试,所述参数化框架中的功能模块中注册有对应自定义命令的函数逻辑且采用测试框架pytest的外壳函数@pytest.fixture实现函数逻辑的上下文逻辑操作,且所述参数化框架在收到自定义命令及其参数后将对应的函数逻辑作为夹具函数直接被用例模块作为参数调用或者作为配置模块被调用至指定的配置文件conftest.py中。
2.根据权利要求1所述的Linux操作***下的Web自动化测试方法,其特征在于,所述参数化框架中的功能模块包括用于提供包括保持操作登录状态、获取后端接口数据并处理、日志信息打印保存和用例变量参数化的公共函数API的可复用API,所述参数化框架调用可复用API的处理步骤包括:
S101,根据cookie文件检查是否处于登陆状态,若处于登陆状态,则跳转步骤S102;否则,执行登陆操作生成新的cookie文件以保存登陆状态的信息;
S102,读取预设的配置文件config.ini中的IP地址和请求头head的信息,根据IP地址和请求头head的信息发出Get请求获取对应的后端接口数据,通过数据分析函数对后端接口数据处理得到实际测试中测试用例TestCase需要使用的数据内容及格式以作为测试用例中断言判断、输入框的数据参数使用;获取用于记录测试用例TestCase中通用配置和参数且以json格式保存信息的用例变量参数化文件,并通过json格式读取函数get_json读取用例变量参数化文件中的数据,调用测试用例TestCase需要使用的数据内容及格式以及从用例变量参数化文件中获取的数据生成测试用例TestCase并执行测试;
S103,调用日志生成器记录测试用例TestCase的执行结果;
S104,将测试用例TestCase的信息和执行结果保存到日志文件log中;
S105,结束。
3.根据权利要求2所述的Linux操作***下的Web自动化测试方法,其特征在于,步骤S102中执行测试是通过测试用例驱动run.py实现的,所述测试用例驱动run.py调用测试用例TestCase执行测试包括:
S201,打印开始测试的信息;
S202,初始化测试报告目录,定义测试结果报告的生成目录、名称和格式;
S203,判断传入模块名称参数是否成立,若成立则判定仅需执行测试用例TestCase中传入模块名称参数对应的模块用例,否则需执行测试用例TestCase中所有的模块用例;
S204,判断测试用例TestCase的运行模式为有头模式headed还是无头模式headless,有头模式headed表示测试用例TestCase的执行过程中显示浏览器图形界面,无头模式headless表示测试用例TestCase的执行过程中不显示浏览器图形界面;
S205,判断是否收到参数化框架收到指定的自定义命令及其参数,若收到指定的自定义命令及其参数,则将测试用例TestCase使用自定义命令传入的参数代替测试环境配置config.py中的参数,否则直接使用测试环境配置config.py中的参数;
S206,控制测试用例TestCase中的指定的模块用例、以指定的运行模式以及测试环境配置config.py中的参数执行测试,在所有的模块用例执行测试完毕后跳转步骤S207;
S207,打印输出测试结束并生成测试报告的信息。
4.根据权利要求3所述的Linux操作***下的Web自动化测试方法,其特征在于,步骤S102之前还包括生成测试用例TestCase:
S301,新增测试用例TestCase的脚本文件并打开在新建的页面中;
S302,抓取被测试的Web页面的元素并在脚本文件中生成对应的测试代码;
S303,在脚本文件中导入测试用例TestCase所需的公共函数模块;
S304,在脚本文件中添加测试用例TestCase的注释信息,测试用例TestCase的注释信息包括用例名称、测试步骤、预期结果;
S305,在脚本文件中添加断言,所述断言用于控制测试用例TestCase的执行以及日志生成器进行日志记录,若断言的结果为真,则继续执行、并调用日志生成器在日志中打印用例执行成功信息;若断言结果为假,则抛出异常、并调用日志生成器在日志中打印错误信息;
S306,关闭测试用例TestCase的脚本文件的页面以减少资源占用。
5.根据权利要求4所述的Linux操作***下的Web自动化测试方法,其特征在于,步骤S103中调用日志生成器记录测试用例TestCase的执行结果之前,还包括创建日志生成器:
S401,创建日志生成器类;
S402,设置基础日志等级,所述基础日志等级为调试debug、信息info、警告warning、错误error和关键critical五种日志等级中的一种;
S403,从配置文件config获取文件路径,并根据获取的文件路径定义输出日志文件filename的路径及名称;
S404,定义日志文件切割规则;
S405,定义日志输出格式;
S406,定义均继承日志过滤方法logging.Filter的两个过滤器Filter,一个过滤器Filter用于过滤日志等级名称levename大于等于错误error的日志,另一个一个过滤器Filter用于过滤输出信息有字符串‘false’的日志,两个过滤器为嵌套关系;
S407,定义过滤日志路径及切割规则,以用于将过滤后的日志保存在过滤日志路径下。
6.根据权利要求5所述的Linux操作***下的Web自动化测试方法,其特征在于,所述参数化框架中的功能模块包括用于基于构建报告和日志格式的配置文件conftest.py将测试结果的展示进行处理生成测试报告的测试报告模块,所述测试报告模块用于将测试用例TestCase的脚本文件中的注释信息传入描述函数description(),通过描述函数description()处理后展示在报告的描述description中。
7.根据权利要求6所述的Linux操作***下的Web自动化测试方法,其特征在于,所述测试报告模块生成测试包括:
S501,确定测试结果的展示需求,包括测试报告的名称、路径、测试数据的统计方法以及每条执行用例的展示内容;
S502,设置测试报告路径和名称;
S503,在测试报告中添加以指定命名的表格,并写入测试环境信息,以及以指定命名的结果统计表格;
S504,遍历执行测试用例列表,若遍历完毕则跳转步骤S509;否则跳转步骤S505;
S505,获取遍历得到的当前测试用例TestCase的测试结果;
S506,调用配置文件conftest.py获取当前测试用例TestCase的注释信息和失败截图;
S507,调用时间统计函数计算当前测试用例TestCase的会话结束和开始时间之差,获取到当前测试用例TestCase的执行总时间;
S508,将当前测试用例TestCase的信息写入所述结果统计表格中,跳转步骤S504;
S509,根据测试结果的展示需求生成测试报告,结束并退出。
8.根据权利要求7所述的Linux操作***下的Web自动化测试方法,其特征在于,步骤S502中设置测试报告的路径和名称时,测试报告的路径为当前目录、测试时间命名目录、测试报告名称三者的组合得到的名称,且其中当前目录通过调用config.py文件获取,测试时间命名目录为使用格式化时间函数得到。
9.一种Linux操作***下的Web自动化测试***,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~8中任意一项所述Linux操作***下的Web自动化测试方法。
10.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~8中任意一项所述Linux操作***下的Web自动化测试方法。
CN202311667759.0A 2023-12-06 2023-12-06 一种Linux操作***下的Web自动化测试方法及*** Pending CN117648257A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311667759.0A CN117648257A (zh) 2023-12-06 2023-12-06 一种Linux操作***下的Web自动化测试方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311667759.0A CN117648257A (zh) 2023-12-06 2023-12-06 一种Linux操作***下的Web自动化测试方法及***

Publications (1)

Publication Number Publication Date
CN117648257A true CN117648257A (zh) 2024-03-05

Family

ID=90044800

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311667759.0A Pending CN117648257A (zh) 2023-12-06 2023-12-06 一种Linux操作***下的Web自动化测试方法及***

Country Status (1)

Country Link
CN (1) CN117648257A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118113623A (zh) * 2024-04-29 2024-05-31 之江实验室 一种接口自动化测试方法、装置、存储介质及电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118113623A (zh) * 2024-04-29 2024-05-31 之江实验室 一种接口自动化测试方法、装置、存储介质及电子设备

Similar Documents

Publication Publication Date Title
CN110928772B (zh) 一种测试方法及装置
US6941546B2 (en) Method and apparatus for testing a software component using an abstraction matrix
US10067858B2 (en) Cloud-based software testing
US9292416B2 (en) Software development kit testing
US20140109063A1 (en) Capturing test data associated with error conditions in software item testing
US8832125B2 (en) Extensible event-driven log analysis framework
JP2006018827A (ja) スマート・ユーザ・インターフェース記録および再生フレームワーク
US20140109052A1 (en) Test environment managed within tests
US9152539B2 (en) Tag-based graphical user interface production systems and methods
CN111290951B (zh) 测试方法、终端、服务器、***及存储介质
CN113778898B (zh) 用户界面自动化测试方法、装置、电子设备及存储介质
CN115080398A (zh) 一种接口自动化测试***及方法
CN117648257A (zh) 一种Linux操作***下的Web自动化测试方法及***
CN111309734B (zh) 自动生成表数据的方法及***
CN112241360A (zh) 一种测试用例生成方法、装置、设备及存储介质
CN115658529A (zh) 用户页面的自动化测试方法以及相关设备
US20140109050A1 (en) Altering a test
US9946632B1 (en) Self-service customer escalation infrastructure model
CN112148599A (zh) 性能压测方法、装置及设备
CN112069082A (zh) 一种自动化测试方法及***
CN112416735A (zh) 一种应用程序检测方法、装置及终端设备、存储介质
TW202303388A (zh) 軟體應用中鑑別錯誤的裝置及方法
CN115185825A (zh) 接口测试的调度方法及装置
WO2012127729A1 (ja) 移行テスト支援システム、移行テスト支援プログラム、移行テスト支援方法
CN113868140A (zh) 一种自动化测试的方法及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination