CN117632710A - 测试代码的生成方法、装置、设备及存储介质 - Google Patents
测试代码的生成方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117632710A CN117632710A CN202311560661.5A CN202311560661A CN117632710A CN 117632710 A CN117632710 A CN 117632710A CN 202311560661 A CN202311560661 A CN 202311560661A CN 117632710 A CN117632710 A CN 117632710A
- Authority
- CN
- China
- Prior art keywords
- test
- information
- interface structure
- language model
- generating
- 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
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 316
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000004458 analytical method Methods 0.000 claims abstract description 21
- 230000008859 change Effects 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 12
- 238000012216 screening Methods 0.000 claims description 4
- 238000013522 software testing Methods 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 23
- 238000012545 processing Methods 0.000 description 10
- 230000004044 response Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 230000002159 abnormal effect Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000003058 natural language processing Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 241000282326 Felis catus Species 0.000 description 2
- 238000013475 authorization Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 241000289669 Erinaceus europaeus Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003631 expected effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提供了一种测试代码的生成方法、装置、设备以及存储介质,涉及计算机技术领域,尤其涉及软件开发、软件测试、大语言模型技术领域。具体实现方案为:对待测项目的源代码进行代码分析,确定接口结构信息;对待测项目进行流量录制,得到测试数据;利用大语言模型,根据接口结构信息和测试数据,生成测试用例;以及利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码。本公开可以辅助测试人员设计测试用例和自动化编写测试代码,提升测试效率。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及软件开发、软件测试、大语言模型技术领域。
背景技术
随着互联网技术的不断发展,互联网产品不断创新和更迭。为保证各类软件产品的质量,测试人员需要根据快速迭代的功能进行测试设计,编写测试用例。
发明内容
本公开提供了一种用于测试代码的生成方法、装置、设备以及存储介质。
根据本公开的一方面,提供了一种测试代码的生成方法,包括:
对待测项目的源代码进行代码分析,确定接口结构信息;
对待测项目进行流量录制,得到测试数据;
利用大语言模型,根据接口结构信息和测试数据,生成测试用例;以及
利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码。
根据本公开的另一方面,提供了一种测试代码的生成装置,包括:
分析模块,用于对待测项目的源代码进行代码分析,确定接口结构信息;
录制模块,用于对待测项目进行流量录制,得到测试数据;
第一生成模块,用于利用大语言模型,根据接口结构信息和测试数据,生成测试用例;以及
第二生成模块,用于利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行本公开实施例中任一的方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,该计算机指令用于使该计算机执行根据本公开实施例中任一的方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现根据本公开实施例中任一的方法。
本公开可以辅助测试人员设计测试用例和自动化编写测试代码,提升测试效率。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开一实施例的测试代码的生成方法的流程示意图;
图2是根据本公开一实施例的测试用例的更新方法的流程示意图;
图3是根据本公开另一实施例的测试代码的生成方法的流程示意图;
图4是根据本公开一实施例的测试代码的生成装置的结构示意图;
图5是用来实现本公开实施例的测试代码的生成方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在测试用例编写的过程中,如何准确的获取到接口及其参数是一项复杂的工作,如何能生成准确、有效的接口测试用例是亟待解决的任务。
相关技术中,可以通过对测试请求的分析,根据字符串匹配规则,获取接口路径信息、请求参数和回包信息。这种方式往往依赖于构造实际的请求,构造请求需要进行额外的步骤。而根据字符串的匹配规则进行匹配的准确度往往较低,根据请求的内容推断出原有接口详情的准确率往往是很有限的。同时,该场景适用于单独接口的测试用例生成,无法进行多个接口或是一组接口的组合场景生成。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个问题,本公开的实施方式提供一种测试代码的生成方法,利用本公开的实施方式的技术方案,可以准确获取接口基本结构和有效的测试数据,辅助测试人员设计测试用例和自动化编写测试代码,提升测试效率。
图1是本公开一实施例提供的测试代码的生成方法的流程示意图。如图1所示,该方法至少包括以下步骤:
S101、对待测项目的源代码进行代码分析,确定接口结构信息。
待测项目可以理解为需要进行测试的软件系统或软件工程,也可以称之为被测工程,待测项目可能包括整个软件系统的多个组件、模块或文件。
对待测项目的源代码进行静态代码分析,从而自动化地获取源代码的接口描述信息以及接口基本结构。具体而言,可以先找到其中的函数定义、类定义、变量声明等信息,再进一步了解函数、方法之间的调用关系。对于函数和方法,提取其输入和输出参数信息。
接口结构信息用于描述接口基本结构,包括描述软件系统中不同部分之间如何通信和交互的元数据。
S102、对待测项目进行流量录制,得到测试数据。
对待测项目进行流量录制包括在测试环境或常规使用环境中,对接口请求和返回结果进行流量录制和分析,得到更贴近真实请求的测试数据。测试数据可以包括正常情况下的输入数据、边界条件下的输入数据和可能的异常输入等。
S103、利用大语言模型,根据接口结构信息和测试数据,生成测试用例。
大语言模型(Large Language Model,LLM)简称大模型,是指参数规模庞大的自然语言处理(Natural Language Processing,NLP)模型,模型参数的数量和/或模型结构的复杂度超过预设阈值,模型在训练时处理了大规模的文本数据,具备理解和生成自然语言的能力。在一种示例中,大模型可以包括由百度开发的文心一言模型,由OpenAI开发的ChatGPT模型,由Google开发的BERT模型等。
测试用例是在软件测试中设计和执行的一组输入、执行条件和预期结果,旨在验证特定的软件功能或系统特性。测试用例通常由测试人员编写,目的是确保软件在各种情况下都能正常运行。每个测试用例都包含了一组步骤,这些步骤指导测试人员执行测试并检查系统的响应。
区别于测试代码,测试用例是测试的实体,测试用例是对特定功能或场景的测试的描述,它提供了测试的输入、执行步骤和预期输出。测试用例是实际测试活动的基本单元。
测试代码是实现测试的手段,测试代码通常由开发人员或测试人员编写的代码,负责实际执行测试用例并检查实际输出是否与预期输出一致。测试代码可以是自动化测试脚本、测试驱动开发中的单元测试等。
利用大语言模型生成测试用例,可以通过以下步骤实现:
接口结构信息准备:提供接口结构信息,包括接口的输入参数、输出结果、接口方法和可能的异常情况。通常需要以结构化的形式提供,例如JSON或类似的描述。
测试数据准备:提供一系列测试数据,包括正常情况下的输入数据、边界条件下的输入数据和可能的异常输入。测试数据应当涵盖接口的各个方面,以确保测试用例的全面性。
模型调用:通过对话的方式使用大语言模型,或者通过编写代码或脚本,调用模型并传递接口结构信息和测试数据。
测试用例生成:模型将分析接口结构信息和测试数据,然后生成相应的测试用例。生成的用例可能涵盖各种输入组合,包括正常和异常情况。
测试用例输出:模型将生成的测试用例以文本或其他适当的格式输出,供测试团队或开发人员使用。
S104、再次利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码。
大语言模型可以提供高效、快捷地生成测试用例,但为了确保其质量和适用性,需要审查和验证生成的用例,从而筛选出符合逻辑的测试用例,同时尽可能使测试用例覆盖所有可能的情况。
将经筛选的测试用例、接口结构信息以及测试数据,再次输入给大语言模型,使其根据上述内容生成测试代码。
根据本公开实施例的方案,可以准确获取接口基本结构和有效的测试数据,通过大模型辅助测试人员设计测试用例和自动化编写测试代码,提升测试效率。另一方面,本公开实施例先利用大模型生成测试用例,便于测试人员对测试用例的设计方案进行确认和筛选,之后再次利用大模型生成测试代码,在测试用例设计时可以对单一接口生成测试用例,也可以对一组多个接口生成测试用例。
在一种可能的实现方式中,步骤S101对待测项目的源代码进行代码分析,确定接口结构信息,进一步包括:
S1011、根据待测项目的源代码,构建抽象语法树。
S1012、对抽象语法树进行树遍历,确定源代码中定义的接口结构信息。其中,所述接口结构信息包括路径信息、请求参数信息或返回包信息中的至少一种。
本公开实施例中,抽象语法树(Abstract Syntax Tree,AST)静态代码分析可以用于确定待测项目的接口描述信息和接口结构信息。接口描述信息是对接口的一般性描述,通常包括接口的功能、用途、输入参数、输出结果等。接口结构信息是更具体的关于接口的数据结构、路径、请求参数、返回值等详细信息。还包括请求参数的数据类型、参数的顺序、参数的约束条件,以及接口返回值的结构等。具体实施步骤可以包括:
构建AST:首先,通过解析源代码,构建抽象语法树。可以通过使用编程语言的解析器或专门的AST生成工具实现。
遍历AST节点:对构建的AST进行遍历,识别和访问不同类型的节点。根据编程语言的语法,找到函数定义、类定义、变量声明等信息。
识别函数和方法:通过分析AST,可以识别出源代码中的函数和方法。函数和方法的名称、参数列表和返回类型是接口结构信息的一部分。
分析调用关系:通过分析AST中的调用关系,可以了解函数、方法之间的调用关系,理解代码的执行流程。
提取输入输出参数:对于函数和方法,可以提取其输入和输出参数信息,检查函数的参数列表和返回语句。
识别类和模块:如果是面向对象的代码,识别类和模块的定义也是重要的。这包括类的属性、方法,以及模块之间的关系。
处理泛型和模板:如果编程语言支持泛型或模板,需要相应地处理,以识别具体的泛型实例和模板参数。
生成接口文档:基于从AST中提取的信息,可以生成接口文档,描述项目中的各个函数、类、模块之间的关系和功能。
结合其他信息:静态代码分析通常结合其他信息源,如注释、文档、类型信息等,以提高接口结构信息的准确性。
根据本公开实施例的方案,通过AST静态代码分析,可以自动化获取源代码的结构信息,并准确地得到接口结构信息。
在一种可能的实现方式中,步骤S102对待测项目进行流量录制,得到测试数据,进一步包括:
S1021、对待测项目的接口发送请求,录制收发的流量数据包。
S1022、根据流量数据包中的第一请求参数和返回结果,筛选得到有效的测试数据。
本公开实施例中,流量数据包中的第一请求参数可以包括:
请求方法(GET、POST、PUT、DELETE等):指定了接口调用的操作类型。请求URL:包含了接口的路径和参数。请求头(Headers):包括了请求的元信息,例如认证信息、内容类型等。请求体(Body):对于包含数据的请求,请求体中包含了实际的数据。
流量数据包中的返回结果(响应数据)可以包括:
状态码(Status Code):表示了请求的处理结果,例如200表示成功,404表示未找到,500表示服务器错误等。响应头(Headers):包括了响应的元信息,例如内容类型、响应时间等。响应体(Body):包含了服务器返回的实际数据,对于接口测试,可以是JSON、XML等格式的数据。
流量数据包中还可以包括:
异常情况数据,可以包含错误信息:如果有错误发生,记录了错误的详细信息,帮助定位问题;和异常状态码:如果有异常,记录了异常的状态码。
认证和授权信息,可以包含用户身份信息:如果有用户身份认证,记录了请求中的用户信息;和访问令牌:对于需要授权的接口,记录了访问令牌的生成和使用。
性能信息,可以包含请求耗时:记录了请求的耗时情况;和服务器响应时间:记录了服务器处理请求的时间。
上述流量数据可以通过常见的工具进行录制和分析,例如Fiddler、Charles、Wireshark等用于流量录制的工具,以及Postman、Swagger等用于接口请求分析的工具。
使用流量录制工具的过程通常包括:设置代理以监控应用程序与服务器之间的通信。在设置好代理后,启动待测项目对应的应用程序并执行测试场景。流量录制工具将捕获应用程序与服务器之间的所有交互,从而获取包含请求和响应的流量数据包。之后,分析录制的流量数据,识别和提取有效的测试数据。通常包括登录信息、各种输入和边界条件等。
有效的测试数据是能够充分覆盖待测项目的各种输入情况,涵盖系统的所有功能,确保每个功能都得到适当的测试,以验证其正确性、可用性和性能的数据。有效的数据通常应具备真实性和多样性,包括多种不同的情况,覆盖各种可能的输入组合,包括边界情况和异常情况。即测试数据应该涵盖输入范围的边界值,以确保系统在边缘情况下的正确性。同时还应该包括对系统进行负面测试的情况,即不合法或异常输入。另外,有效的测试数据应该能够模拟系统在高负载情况下的行为。
相反,无效的测试数据通常指不符合系统预期输入要求的数据,或者无法触发系统特定行为的数据。具体而言,可能是存在缺失信息、格式错误、越界值、不合法输入、重复数据、逻辑错误的数据。
以往根据测试用例生成接口文档时,只能根据参数的类型定义,进行参数的校验;例如校验返回值中名称为“code”的类型为int;在进行参数值校验时,需要测试人员进行手动输入校验。在进行测试用例构造时,也无法准确的获取信息,例如请求参数中的类型字段,往往是枚举值,有固定的合法输入,但是仅从代码解析中可能无法获取到该类型值的含义。
在一种示例中,测试查询type参数,该部分值需要由测试人员手工输入。通过流量录制,对于查询宠物接口,获取到已有的测试流量有type为“cat”/“dog”/“rabbit”,以及各个类型对应的宠物id信息。因此将这些信息进行聚合后输入给大语言模型,这样生成的用例设计中会包含type的类型:
-测试查询type为cat的宠物信息,返回数据成功。
-测试查询type为dog的宠物信息,返回数据成功。
-测试查询type为rabbit的宠物信息,返回数据成功。
-测试查询type为hedgehog的宠物信息,接口返回参数错误。
根据本公开实施例的方案,通过结合在测试环境中的流量录制,对接口请求进行自动化分析,可以生成更贴近真实请求的测试数据,能够准确地获取所有被测项目的接口基本信息,构造出更符合测试场景的测试数据。
在一种可能的实现方式中,步骤S103利用大语言模型,根据接口结构信息和测试数据,生成测试用例,进一步包括:
S1031、根据接口结构信息、测试数据以及第一提示信息,得到第一输入文本。其中,第一提示信息用于指示生成可读文本形式的测试用例。
S1032、利用大语言模型,根据第一输入文本,生成测试用例。
本公开实施例中,在根据接口结构信息、测试数据构造第一输入文本时,可以加入第一提示信息,从而在输入阶段指定更加明确地的需求,例如:在模型输入的文本中使用清晰、具体的提示文本来表达与大语言模型对话的意图。明确说明希望得到的输出内容的形式、测试用例的数量等方面的具体要求。可以是关于正确性、代码覆盖率等方面的要求。第一提示信息也可以是一些示例输入输出,例如测试用例的示例,以帮助模型理解期望的输出内容。第一提示信息还可以是上下文信息、背景信息或身份信息,使得模型了解任务是关于生成与测试用例相关的自然语言文本。例如,可以要求大模型以擅长编写测试用例的软件测试人员的身份进行对话。
需要说明的是,清晰的提示指导和提供足够的上下文信息或背景信息是确保模型输出符合期望的有效手段。不同的模型可能对输入的敏感性有所不同,因此在实际应用中需要尝试各种提示方式,以提高生成内容的效果。
根据本公开实施例的方案,通过加入更加具体的提示信息,可以提高大模型输出内容的相关性和准确性,得到效果更好的测试用例。
在一种可能的实现方式中,步骤S103利用大语言模型,根据接口结构信息和测试数据,生成测试用例,进一步包括:
利用预设脚本,根据接口结构信息和测试数据,构建第二请求参数。
将第二请求参数发送至大语言模型的调用接口。
利用预设脚本,从大语言模型反馈的输出内容中提取得到测试用例。
本公开实施例中,可以通过创建一个程序或脚本来调用大语言模型并使用其输出。这个代码或脚本的目的是与模型进行交互,将输入传递给模型,获取模型的输出,然后进行后续处理。例如完整地提取出测试用例的部分内容,删除其它不相关的部分。还可以对各个测试用例进行编号和存储。
在一个示例中,可以使用Python中的请求库调用大模型的API,示例性的代码包括:
import requests
import json
#定义模型的API地址
model_api_url="http://xxxxxx"
#定义接口结构信息和测试数据
interface_structure={...}#接口结构信息的JSON表示
test_data={...}#测试数据的JSON表示
#构建请求payload
payload={
"interface_structure":json.dumps(interface_structure),
"test_data":json.dumps(test_data)
}
#发送POST请求到模型的API
response=requests.post(model_api_url,data=payload)
#获取模型的输出
output_data=response.json()
#处理模型的输出,可能包括生成的测试用例
#打印结果或进行其他后续处理
print(output_data)
根据本公开实施例的方案,通过预先编写的脚本,可以对大模型的输入输出内容进行自动化处理,以便于更好地管理和使用大模型,提高开发和维护的效率。
在一种可能的实现方式中,步骤S104再次利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码,进一步包括:
S1041、根据经筛选的测试用例、接口结构信息、测试数据以及第二提示信息,生成第二输入文本。其中,第二提示信息用于指示生成可执行的测试代码。
S1042、再次利用大语言模型,根据第二输入文本,生成测试代码。
本公开实施例中,在利用大语言模型生成测试用例后,可以由具有相关测试经验和知识的测试人员从测试用例中进行筛选,选取出更符合逻辑、预期效果更好的测试用例。将经筛选的测试用例、接口结构信息、测试数据以及第二提示信息,构造生成第二输入文本。第二提示信息用于指示生成可执行的测试代码。第二提示信息还可以对生成内容指定具体的要求,例如编程语言、语法和代码风格。第二提示信息的形式与上述第一提示信息相似,构造第二输入文本的方法可以采用与上述构造第一输入文本相同的方法,
根据本公开实施例的方案,通过加入更加具体的提示信息,可以提高大模型输出内容的相关性和准确性,得到效果更好的测试代码。
在一种可能的实现方式中,步骤S104再次利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码,进一步包括:
根据经筛选的测试用例、测试代码风格样例、接口结构信息、测试数据以及第三提示信息,得到第三输入文本。其中,第三提示信息用于指示生成目标风格的可执行的测试代码。
再次利用大语言模型,根据第三输入文本,生成测试代码。
本公开实施例中,测试代码风格样例可以包括负责本次待测项目的测试人员已有的测试代码,即历史测试用例代码。具体来说,可以是其它测试项目的测试代码,也可以是本待测项目的旧版本的测试代码。已有的测试代码作为给大模型的参考,目的是为了使最终生成的用例代码更接近于测试人员的编写习惯。该步骤中的已有测试代码不局限于是否与当前测试场景一致,对于不一致的场景也可以进行参考,生成自动化测试代码。
在生成代码时,以往生成Java/Python等的测试用例需要根据规则开发固定的代码生成。而利用大模型生成测试代码时,通过输入存量测试用例代码和被测接口的样例,可以生成符合用户习惯的自动化测试代码。
在一种示例中,已有用例代码风格:
def test_create_pet():
测试创建一个宠物信息,校验宠物创建成功
//Setup
创建一个宠物店
//Test
从配置文件中获取新增宠物信息
//Action
调用创建宠物信息接口
//Assert
校验宠物店
大模型根据以上样例生成的用例代码风格可以是:
def test_get_pet():
测试查询一个宠物信息,校验宠物查询成功
//Setup
宠物店中增加一个宠物信息
//Test
从配置文件中获取待查询的宠物信息
//Action
调用查询接口查询setup中增加的宠物信息
//Assert
校验宠物信息
根据本公开实施例的方案,通过在输入文本中加入测试代码风格样例,使大语言模型生成符合用户编写习惯的自动化测试代码。
在一种可能的实现方式中,本公开实施例的测试代码的生成方法,还包括步骤:
S201、在待测项目的源代码发生变更的情况下,确定发生变更的源代码对应的变更接口信息。
S202、根据变更接口信息,从待测项目的历史测试用例中确定相关的目标测试用例。
S203、利用大语言模型,根据目标测试用例和变更接口信息,更新目标测试用例和/或生成新测试用例。
本公开实施例中,可以基于AST解析待测工程项目中是否存在变更信息,如图2所示,在待测项目的源代码发生变更的情况下(即被测工程代码修改),找到变更代码对应的接口信息(即变更接口信息),并根据变更接口信息匹配相关的已有测试用例,作为待更新的目标测试用例。之后,利用大语言模型,根据目标测试用例和变更接口信息,可以更新和修改已有测试用例,例如补充校验信息、修改参数结构等。也可以根据新增待测场景新增测试用例。
在一种示例中,如果在被测代码的实现逻辑中,增加了:
if(type==“dog”){
result[“vend”]=true;
}
该方法被创建宠物接口调用,则根据AST可以查询父引用,直至查询到对应的接口,根据接口信息,检索到相关的测试用例,将相关测试用例和变更内容输入大模型。可在原有的「创建type为dog」的测试用例中增加判断结果中vend为true的校验。
根据本公开实施例的方案,可以及时根据代码的变更,对已有测试用例进行更新和修改,或是根据新增待测场景生成新测试用例,进一步提高了测试效率。
图3是本公开另一实施例提供的测试代码的生成方法的流程示意图。
如图3所示,该方法包括以下步骤:
步骤一、获取被测工程代码(待测项目)中的接口描述信息。
步骤二、结合接口描述信息,确定待测项目的接口基本结构,即接口结构信息。
步骤三、进行测试环境流量录制,得到接口请求信息。
步骤四、根据接口请求信息,确定有效的测试数据。
步骤五、将接口基本结构和有效的测试数据输入给大模型,基于大模型进行自动化测试用例生成,得到测试用例设计。
步骤六、将测试用例设计、接口基本结构、有效的测试数据以及用户已有的测试用例代码输入给大语言模型,通过大语言模型生成符合用户编写习惯的自动化测试代码。
本公开实施例中各步骤的具体实施方式和示例的描述,可以参见上述方法实施例中对应步骤的相关描述,在此不再赘述。
图4是本公开一实施例提供的测试代码的生成装置的结构示意图。如图4所示,该装置包括:
分析模块401,用于对待测项目的源代码进行代码分析,确定接口结构信息。
录制模块402,用于对待测项目进行流量录制,得到测试数据。
第一生成模块403,用于利用大语言模型,根据接口结构信息和测试数据,生成测试用例。
第二生成模块404,用于利用大语言模型,根据经筛选的测试用例、接口结构信息以及测试数据,生成测试代码。
在一种可能的实现方式中,分析模块401用于:
根据待测项目的源代码,构建抽象语法树。
对抽象语法树进行树遍历,确定源代码中定义的接口结构信息。其中,所述接口结构信息包括路径信息、请求参数信息或返回包信息中的至少一种。
在一种可能的实现方式中,录制模块402用于:
对待测项目的接口发送请求,录制收发的流量数据包。
根据流量数据包中的第一请求参数和返回结果,筛选得到有效的测试数据。
在一种可能的实现方式中,第一生成模块403用于:
根据接口结构信息、测试数据以及第一提示信息,得到第一输入文本。其中,第一提示信息用于指示生成可读文本形式的测试用例。
利用大语言模型,根据第一输入文本,生成测试用例。
在一种可能的实现方式中,第一生成模块403用于:
利用预设脚本,根据接口结构信息和测试数据,构建第二请求参数。
将第二请求参数发送至大语言模型的调用接口。
利用预设脚本,从大语言模型反馈的输出内容中提取得到测试用例。
在一种可能的实现方式中,第二生成模块404用于:
根据经筛选的测试用例、接口结构信息、测试数据以及第二提示信息,得到第二输入文本。其中,第二提示信息用于指示生成可执行的测试代码。
利用大语言模型,根据第二输入文本,生成测试代码。
在一种可能的实现方式中,第二生成模块404用于:
根据经筛选的测试用例、测试代码风格样例、接口结构信息、测试数据以及第三提示信息,得到第三输入文本。其中,第三提示信息用于指示生成目标风格的可执行的测试代码。
利用大语言模型,根据第三输入文本,生成测试代码。
在一种可能的实现方式中,该装置还包括更新模块,用于:
在待测项目的源代码发生变更的情况下,确定发生变更的源代码对应的变更接口信息。
根据变更接口信息,从待测项目的历史测试用例中确定相关的目标测试用例。
利用大语言模型,根据目标测试用例和变更接口信息,更新目标测试用例和/或生成新测试用例。
本公开实施例的装置的各模块、子模块的具体功能和示例的描述,可以参见上述方法实施例中对应步骤的相关描述,在此不再赘述。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字助理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图5所示,设备500包括计算单元501,其可以根据存储在只读存储器(ROM)502中的计算机程序或者从存储单元508加载到随机访问存储器(RAM)503中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储设备500操作所需的各种程序和数据。计算单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如测试代码的生成方法。例如,在一些实施例中,测试代码的生成方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或通信单元509而被载入和/或安装到设备500上。当计算机程序加载到RAM 503并由计算单元501执行时,可以执行上文描述的测试代码的生成方法的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行测试代码的生成方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (19)
1.一种测试代码的生成方法,包括:
对待测项目的源代码进行代码分析,确定接口结构信息;
对所述待测项目进行流量录制,得到测试数据;
利用大语言模型,根据所述接口结构信息和所述测试数据,生成测试用例;以及
利用所述大语言模型,根据经筛选的测试用例、所述接口结构信息以及所述测试数据,生成测试代码。
2.根据权利要求1所述的方法,其中,对待测项目的源代码进行代码分析,确定接口结构信息,包括:
根据待测项目的源代码,构建抽象语法树;
对所述抽象语法树进行树遍历,确定所述源代码中定义的接口结构信息,其中,所述接口结构信息包括路径信息、请求参数信息或返回包信息中的至少一种。
3.根据权利要求1所述的方法,其中,对所述待测项目进行流量录制,得到测试数据,包括:
对所述待测项目的接口发送请求,录制收发的流量数据包;
根据所述流量数据包中的第一请求参数和返回结果,筛选得到有效的测试数据。
4.根据权利要求1所述的方法,其中,利用大语言模型,根据所述接口结构信息和所述测试数据,生成测试用例,包括:
根据所述接口结构信息、所述测试数据以及第一提示信息,得到第一输入文本;其中,所述第一提示信息用于指示生成可读文本形式的测试用例;
利用大语言模型,根据所述第一输入文本,生成测试用例。
5.根据权利要求1所述的方法,其中,利用大语言模型,根据所述接口结构信息和所述测试数据,生成测试用例,包括:
利用预设脚本,根据所述接口结构信息和所述测试数据,构建第二请求参数;
将所述第二请求参数发送至大语言模型的调用接口;
利用所述预设脚本,从所述大语言模型反馈的输出内容中提取得到测试用例。
6.根据权利要求1所述的方法,其中,利用所述大语言模型,根据经筛选的测试用例、所述接口结构信息以及所述测试数据,生成测试代码,包括:
根据经筛选的测试用例、所述接口结构信息、所述测试数据以及第二提示信息,生成第二输入文本;其中,所述第二提示信息用于指示生成可执行的测试代码;
利用所述大语言模型,根据所述第二输入文本,生成测试代码。
7.根据权利要求1所述的方法,其中,利用所述大语言模型,根据经筛选的测试用例、所述接口结构信息以及所述测试数据,生成测试代码,包括:
根据经筛选的测试用例、测试代码风格样例、所述接口结构信息、所述测试数据以及第三提示信息,得到第三输入文本;其中,所述第三提示信息用于指示生成目标风格的可执行的测试代码;
利用所述大语言模型,根据所述第三输入文本,生成测试代码。
8.根据权利要求1所述的方法,还包括:
在待测项目的源代码发生变更的情况下,确定发生变更的源代码对应的变更接口信息;
根据变更接口信息,从所述待测项目的历史测试用例中确定相关的目标测试用例;
利用大语言模型,根据所述目标测试用例和所述变更接口信息,更新所述目标测试用例和/或生成新测试用例。
9.一种测试代码的生成装置,包括:
分析模块,用于对待测项目的源代码进行代码分析,确定接口结构信息;
录制模块,用于对所述待测项目进行流量录制,得到测试数据;
第一生成模块,用于利用大语言模型,根据所述接口结构信息和所述测试数据,生成测试用例;以及
第二生成模块,用于利用所述大语言模型,根据经筛选的测试用例、所述接口结构信息以及所述测试数据,生成测试代码。
10.根据权利要求9所述的装置,其中,分析模块用于:
根据待测项目的源代码,构建抽象语法树;
对所述抽象语法树进行树遍历,确定所述源代码中定义的接口结构信息,其中,所述接口结构信息包括路径信息、请求参数信息或返回包信息中的至少一种。
11.根据权利要求9所述的装置,其中,录制模块用于:
对所述待测项目的接口发送请求,录制收发的流量数据包;
根据所述流量数据包中的第一请求参数和返回结果,筛选得到有效的测试数据。
12.根据权利要求9所述的装置,其中,第一生成模块用于:
根据所述接口结构信息、所述测试数据以及第一提示信息,得到第一输入文本;其中,所述第一提示信息用于指示生成可读文本形式的测试用例;
利用大语言模型,根据所述第一输入文本,生成测试用例。
13.根据权利要求9所述的装置,其中,第一生成模块用于:
利用预设脚本,根据所述接口结构信息和所述测试数据,构建第二请求参数;
将所述第二请求参数发送至大语言模型的调用接口;
利用所述预设脚本,从所述大语言模型反馈的输出内容中提取得到测试用例。
14.根据权利要求9所述的装置,其中,第二生成模块用于:
根据经筛选的测试用例、所述接口结构信息、所述测试数据以及第二提示信息,得到第二输入文本;其中,所述第二提示信息用于指示生成可执行的测试代码;
利用所述大语言模型,根据所述第二输入文本,生成测试代码。
15.根据权利要求9所述的装置,其中,第二生成模块用于:
根据经筛选的测试用例、测试代码风格样例、所述接口结构信息、所述测试数据以及第三提示信息,得到第三输入文本;其中,所述第三提示信息用于指示生成目标风格的可执行的测试代码;
利用所述大语言模型,根据所述第三输入文本,生成测试代码。
16.根据权利要求9所述的装置,还包括更新模块,用于:
在待测项目的源代码发生变更的情况下,确定发生变更的源代码对应的变更接口信息;
根据变更接口信息,从所述待测项目的历史测试用例中确定相关的目标测试用例;
利用大语言模型,根据所述目标测试用例和所述变更接口信息,更新所述目标测试用例和/或生成新测试用例。
17.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-8中任一项所述的方法。
19.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311560661.5A CN117632710A (zh) | 2023-11-21 | 2023-11-21 | 测试代码的生成方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311560661.5A CN117632710A (zh) | 2023-11-21 | 2023-11-21 | 测试代码的生成方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117632710A true CN117632710A (zh) | 2024-03-01 |
Family
ID=90015603
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311560661.5A Pending CN117632710A (zh) | 2023-11-21 | 2023-11-21 | 测试代码的生成方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117632710A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971705A (zh) * | 2024-03-28 | 2024-05-03 | 成都九洲电子信息系统股份有限公司 | 基于定制化流量洞察的智能接口自动化测试系统及方法 |
CN118331888A (zh) * | 2024-06-13 | 2024-07-12 | 中国电信股份有限公司 | 接口测试方法及相关设备 |
-
2023
- 2023-11-21 CN CN202311560661.5A patent/CN117632710A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971705A (zh) * | 2024-03-28 | 2024-05-03 | 成都九洲电子信息系统股份有限公司 | 基于定制化流量洞察的智能接口自动化测试系统及方法 |
CN118331888A (zh) * | 2024-06-13 | 2024-07-12 | 中国电信股份有限公司 | 接口测试方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11822919B2 (en) | Auto-generation of API documentation via implementation-neutral analysis of API traffic | |
US10108535B2 (en) | Web application test script generation to test software functionality | |
CN110018955B (zh) | 通过转换手动测试用例来生成自动化测试脚本 | |
US8745641B1 (en) | Automatic verification and anomaly detection in a representational state transfer (REST) application programming interface | |
US8490050B2 (en) | Automatic generation of user interfaces | |
US9983984B2 (en) | Automated modularization of graphical user interface test cases | |
US20140075242A1 (en) | Testing rest api applications | |
US20150347281A1 (en) | Automation testing using descriptive maps | |
US11074162B2 (en) | System and a method for automated script generation for application testing | |
CN117632710A (zh) | 测试代码的生成方法、装置、设备及存储介质 | |
CN109857641A (zh) | 对程序源文件进行缺陷检测的方法及装置 | |
US10705949B2 (en) | Evaluation of library test suites using mutation testing | |
CN113900958A (zh) | 测试用例脚本的生成方法、系统、介质及电子设备 | |
US9507592B2 (en) | Analysis of data integration job | |
CN114385148A (zh) | 一种实现联动功能的方法、装置、设备和存储介质 | |
US10310962B2 (en) | Infrastructure rule generation | |
CN112988578A (zh) | 一种自动化测试方法和装置 | |
CN112416333A (zh) | 软件模型训练方法、装置、系统、设备和存储介质 | |
US20230153081A1 (en) | Methods and systems for correlating source code commitments and model result records during model development | |
CN113360365A (zh) | 一种流程测试方法和流程测试系统 | |
Lavoie et al. | A case study of TTCN-3 test scripts clone analysis in an industrial telecommunication setting | |
CN113238940B (zh) | 一种接口测试结果的比对方法、装置、设备和存储介质 | |
CN115454702A (zh) | 日志故障分析方法、装置、存储介质及电子设备 | |
CN113886216A (zh) | 接口测试和工具配置方法、装置、电子设备和存储介质 | |
US11687441B2 (en) | Intelligent dynamic web service testing apparatus in a continuous integration and delivery environment |
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 |