使用RestAssured库和CucumberBDD框架来自动化API测试使用唯一的URI访问服务器资源和该资源返回的响应。资源的URI作为资源标识符,可以对资源进行GET、POST、PUT、PATCH、DELETE等HTTP操作。RESTAssured是一个Java库,它利用领域特定语言(DSL)为RestfulAPI开发健壮、可维护的测试。让我们来看看RestAssuredLibrary的一些显着特征:它是一个开源应用程序,没有许可费用使用流行的编程语言Java它使Rest服务的API测试和验证变得简单和流畅使用GPath遍历响应,非常适合JSON的XML和响应读取JSON模式的验证可以轻松与其他测试框架(如TestNG、JUnit等)集成支持所有类型的HTTP方法的API自动化,如GET、POST、PUT、DELETE、PATCH、etc.支持BDDGherkin语言,从而实现简洁的编码和易读性Cucumber框架介绍Cucumber是一个开源的支持行为驱动开发(BDD)的测试框架,也是一个被广泛使用的框架。测试人员可以用Gherkin的简单英语编写测试用例。为了让非技术人员能够轻松理解测试过程和流程,许多组织希望将Cucumber框架与Selenium或RestAssured集成以实现应用程序自动化。由于Cucumber允许以纯英文纯文本编写测试和场景,因此许多团队成员(业务分析师、项目经理、手动测试人员)和任何其他非技术人员查看和理解测试工作流程变得非常容易,这成为黄瓜的主要优点。Cucumber被称为行为驱动开发(BDD)框架,因为它使任何人仅通过阅读功能文件就可以获得应用程序的功能行为。Cucumber框架的三个组成部分:1.脚本(Feature)文件:该文件以测试特性、测试场景、测试标签、测试用例、测试数据等形式提供有关被测应用程序的高级信息。这里是用于创建功能文件的几个组件:Feature-定义要测试的功能,通常是标题。场景-定义必须为其创建测试流的特定测试场景。场景大纲-为以管道符号(|)分隔的表结构中提供的不同测试数据定义特定测试场景。Tags-为每个场景定义标签名称,这有助于组织或分组一个特性文件的所有测试场景。可以在上面的Feature关键字上使用标签来指示需要执行哪个功能文件。Given-定义特定测试场景的先决条件When-定义动作,也可以是与尚未执行的应用程序的交互And-定义与先前动作相关的其他动作Then-定义预期的测试输出和要执行的后续动作操作示例-定义testdatasetsfortestcaseswrittenin"ScenarioOutline"2.步骤定义(StepDefinition)文件:创建步骤定义文件是为了将所有脚本文件测试用例步骤链接到代码。步骤定义文件中使用了Given、When、Then等几个注解来映射测试用例步骤以执行代码。对于要执行的测试用例,注释描述必须与playbook文件中提到的测试步骤相匹配。3、测试执行(TestRunner)文件:该文件是测试套件的驱动文件,用于驱动或运行基于playbook文件的步骤定义文件。测试执行文件包含剧本和步骤定义文件的路径,以及执行基于Cucumber的测试报告所需的标签。对于基于Cucumber的HTML报告,还有一个选项可以添加插件以生成有洞察力的报告。集成RestAssured库和Cumber框架了解了RestAssured库和Cucumber框架之后,我们现在来实际了解如何创建测试场景,学习针对不同测试数据集进行API测试的步骤。如前所述,要将RestAssured库与Cucumber框架集成,您需要创建feature、stepdefinition和runner等文件。在继续之前,让我们创建一个简单的maven项目,并在pom.xml文件中导入所有放心的库依赖和cucumber框架。info.cukescucumber-java<版本>1.2.5info.cukescucumber-jvm-deps<版本>1.0.5testinfo.cukescucumber-testng1.2.5编译junitjunitnet.masterthoughtcucumber-reporting<版本>5.0.2io.rest-assuredrest-assured4.3.2测试io.rest-assuredjson路径4.3.2testio.rest-assuredxml-path4.3.2testio.rest-assuredjson-schema-validator4.3.2测试org.hamcresthamcrest-all<版本>1.3版本>test在使用Cucumber框架时,建议对不同的Cucumber组件使用不同的包;这有助于开发更好的项目层次结构和易于理解的测试套件功能文件Reqres_api_test.featureFeature:测试ReqresUsersAPI'sWithRestAssuredLibrary和CucumberFramework@SmokeTestScenarioOutline:ReqresGETAPItestGiventhevalidendpointtofetchusersWhentherequestis以页码“”发送到服务器然后验证电子邮件为“”的第一条用户记录的响应示例:|page|emailID||2|michael.lawson@reqres.in||1|george.bluth@reqres.in|@SmokeTestScenario大纲:ReqresPOSTAPI测试给定有效端点和有效负载以创建用户当请求发送到服务器时,必须使用名称“”创建新用户示例:|用户名||约翰|上述剧本文件的目标是执行多个测试数据参数测试。因此,在创建测试数据时使用“Examples”关键字,测试数据使用竖线符号(|)作为分隔符。要将参数添加到playbook文件中的测试步骤,语法为“”;上述文件中使用了相同的方法。并在Examples的第一行使用相同的变量名,根据特定参数隔离测试数据。步骤定义文件GetApiTest.javapackagestepDefinitions;importstaticio.restassured.RestAssured.given;importorg.testng.Assert;importcucumber.api.java.en.Given;importcucumber.api.java.en.Then;importcucumber.api.java.en.When;导入io.restassured.RestAssured;导入io.restassured.http.ContentType;导入io.restassured.response.Response;公共类GetApiTest{响应响应;@Given("^获取用户的有效端点$")publicvoidsetupEndpoint(){RestAssured.baseURI="https://reqres.in/";RestAssured.basePath="/api/users";}@When("^请求发送到服务器,页码为\"([^\"]*)\"$")publicvoidsendRequest(intpageNumber){response=given().queryParam("page",pageNumber).when().get().then().contentType(ContentType.JSON).extract().response();}@Then("^验证第一个用户记录的响应d将电子邮件设置为\"([^\"]*)\"$")publicvoidvalidateUserData(StringemailID){StringuserEmail=response.path("data[0].email");Assert.assertEquals(userEmail,emailID);}}PostApiTest.javapackagestepDefinitions;importstaticio.restassured.RestAssured.given;importjava.util.HashMap;importorg.testng.Assert;importcucumber.api.java.en.Given;importcucumber.api.java.en.Then;importcucumber.api.java.en.When;importio.restassured.RestAssured;importio.restassured.http.ContentType;importio.restassured.response.Response;publicclassPostApiTest{Responseresponse;publicHashMap