使用TestNG搭建自动化测试框架设计说明书

news2024/9/21 18:50:52

TestNG自动化测试框架V1.0

1. 背景............................................................................................................................ 4

1.1 编写背景............................................................................................................. 4

1.2 自动化成果......................................................................................................... 4

2. TestNG介绍.................................................................................................................. 5

2.1 TestNG概述......................................................................................................... 5

2.2 TestNG优点......................................................................................................... 5

2.3 TestNG安装......................................................................................................... 6

2.4 TestNG注解......................................................................................................... 6

2.4.1 使用注解的好处........................................................................................ 6

2.4.2 TestNG中注解种类..................................................................................... 6

2.4.3 TestNG中注解执行顺序.............................................................................. 7

2.5 TestNG测试用例编写........................................................................................... 7

2.6 TestNG测试集文件使用........................................................................................ 8

2.7 TestNG数据提供者............................................................................................... 8

3. 使用TestNG进行Dubbo协议接口测试......................................................................... 8

3.1 测试框架整体设计图........................................................................................... 8

3.2 项目工程结构图.................................................................................................. 9

3.3 Dubbo介绍........................................................................................................ 11

3.4 数据参数化....................................................................................................... 12

3.5 项目代码托管.................................................................................................... 13

4. 使用TestNG进行Http和Soap协议接口测试.............................................................. 14

4.1 项目工程结构图................................................................................................ 15

4.2 项目框架介绍.................................................................................................... 15

4.3 数据流介绍....................................................................................................... 17

4.4 新建测试用例.................................................................................................... 17

4.5 运行测试........................................................................................................... 18

4.5.1 在方法名上右击运行................................................................................ 18

4.5.2 在Test Case类上右击运行........................................................................ 18

4.5.3 在test suite xml 文件上右击运行.............................................................. 19

4.5.4 运行maven Test....................................................................................... 19

5. 使用TestNG结合Selenium进行Web UI自动化测试.................................................... 21

5.1 测试框架整体设计图......................................................................................... 21

5.2 项目工程结构图................................................................................................ 21

5.3 页面对象模型.................................................................................................... 23

5.4 定位页面元素方法............................................................................................. 23

6. 环境搭建.................................................................................................................... 25

6.1 配置Java环境................................................................................................... 25

6.2 配置Maven环境............................................................................................... 28

6.3 准备Intellij IDEA开发工具.................................................................................. 29

6.4 IDEA中安装Lombok插件.................................................................................... 29

6.5 IDEA中配置Maven............................................................................................. 30

6.6 IDEA中配置Spring.............................................................................................. 30

6.7 IDEA中配置JDK.................................................................................................. 31

6.8 配置Git环境..................................................................................................... 32

1.背景

1.1  编写背景

随着公司的发展与业务的拓展,手工测试已经跟不上公司发展的节奏。全靠手工测试无法保证测试质量与效率,所以引入自动化测试来加强回归测试。自动化测试的目的是通过提高测试效率、测试质量和测试覆盖率来达成节约成本的目的。但平台接口目前使用的是dubbo协议,目前市面上没有可用的自动化测试工具。所以测试组引入了TESTNG进行自主研发进行自动化测试框架搭建。开始了自动化测试实施的道路。

1.2 自动化成果

自动化收益公式:自动化的收益 = 迭代次数 * 全手动执行成本 - 首次自动化成本 - 维护次数 * 维护成本

目前项目组已经进行几个常版本迭代,每个版本进行一次维护,维护成本为2人日。自动化测试的收益随着时间的推移为上升趋势。

目前项目组内自动化执行人员比例为100%。提高了人员素质,同等单价创造了更高的收益。详细数据如下图所示:

2. TestNG介绍

2.1 TestNG概述

TestNG是一套根据JUnit和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,既可以用来做单元测试,也可以用来做集成测试。

TestNG是一个开源的自动化测试框架,NG表示Next Generation,TestNG即表示下一代测试技术。TestNG与JUnit类似,它受JUnit测试思想启发但是比JUnit更加强大,特别是在集成测试时候。特别感谢TestNG的创始人Cedric Beust, TestNG为我们测试者带来诸多方便。

TestNG消除了以往老的测试框架中的许多限制,让开发者和测试者能够通过简单的注解、分组、指定顺序、参数化就可以编写更加灵活、更加强大的测试用例。

TestNG官方文档:TestNG

2.2 TestNG优点

TestNG有如下优点:

1. TestNG可以生成HTML格式的测试报告。对测试结果的描述更加详细,方便定位错误。

2. TestNG注解丰富,如@ExpectedExceptions、@DataProvider等。

3. TestNG可以对测试用例进行分组或指定测试用例执行的先后顺序。JUnit 4测试的依赖性非常强,测试用例间有严格的先后顺序。前一个测试不成功,后续所有的依赖测试都会失败。TestNG 利用@Test 的dependsOnMethods属性来应对测试依赖性问题。某方法依赖的方法失败,可以设置它将被跳过,而不是标记为失败。

4. TestNG可以通过Parallel属性设置并发测试。

5. 对于n个不同参数组合的测试,JUnit 4要写n个测试用例。每个测试用例完成的任务基本是相同的,只是受测方法的参数有所改变。TestNG的数据参数化只需要一个测试用例,然后把所需要的参数加到TestNG的xml配置文件中。这样的好处是参数与测试代码分离,非程序员也可以修改参数,同时修改无需重新编译测试代码。

2.3 TestNG安装

如果在IntelliJ IDEA中使用maven,在项目的pom.xml文件中增加依赖描述即可:

<dependency>

    <groupId>org.testng</groupId>

    <artifactId>testng</artifactId>

    <version>6.8.8</version>

    <scope>test</scope>

</dependency>

2.4 TestNG注解

2.4.1 使用注解的好处

1. TestNG通过查找注解定位到目标方法,因此方法名称并不局限于任何格式或语法。

2. 我们可以通过注解传递参数。

3. 注解是强类型的,所以编译器可以立即识别任何错误。

4. 测试类不再需要继承任何类。

2.4.2 TestNG中注解种类

@BeforeSuite

@AfterSuite

@BeforeTest

@AfterTest

@BeforeGroups

@AfterGroups

@BeforeClass

@AfterClass

@BeforeMethod

@AfterMethod

@DataProvider

@Factory

@Listeners

@Parameters

@Test

2.4.3 TestNG中注解执行顺序

2.5 TestNG测试用例编写

使用TestNG来编写一个测试用例很简单,主要描述为以下几步:

第一步:编写测试用例的业务逻辑。

第二步:在测试方法上插入TestNG注解。

第三步:增加测试用例相关信息,如类名、方法名、组名等等。

第四步:运行该TestNG测试用例。

2.6 TestNG测试集文件使用

2.7 TestNG数据提供者

这个是通过数据提供者来传递数据的,会把二维数组的数据传递给@Test中并打印出计算结果。

3.使用TestNG进行Dubbo协议接口测试

3.1 测试框架整体设计图

一个好的自动化测试框架可以大幅度提高测试人员自动化脚本开发的效率,可以提高自动化脚本开发的并行性和可靠性。自动化测试框架设计得好与坏,直接关系到整个公司的测试水平,也关系到公司产品的发布周期和发布质量。所以设计框架时候尽量做到数据分离,业务层和逻辑层不能混杂在一起。整体框架设计图如图:

Dubbo采用全Spring配置方式,它基于Spring的Schema扩展进行加载,所要我们需要用到Spring来加载Dubbo的配置。Dubbo服务提供者会将自己的提供出来的服务注册到zookeeper中心,我们的测试工程模拟的角色是服务消费者,需要在dubbo配置文件中配置注册中心zookeeper的地址和即将测试的目标接口。

Dubbo协议接口自动化测试项目由maven+TestNG+Spring设计而成。Maven可以统一管理项目依赖的jar包,通过Maven可以在IDEA中直接进行编译、执行测试,也可以与持续发布工具Jenkins集成。Jenkins通过Git插件,获取到我们托管在git仓库中工程项目的最新代码,通过maven命令对项目进行编译、执行。将生成的测试报告通过邮件发送到指定邮箱。

3.2 项目工程结构图

使用TestNG进行Dubbo协议接口测试工程结构图如下:

 src.test.java.com.bestpay.test.services: 这里放的是测试用例代码。测试用例中以@Test注释为主体,在@Test方法中书写完整的测试步骤。

src.test.resources.test-excels: 这里放的是数据文档。在Excel中设计测试数据。每个sheet对应的是一个测试用例的测试数据。

src.test.resources.test-suites: testng的配置文件,用于存放部分测试数据以及测试的平台,设置用例执行策略(多线程还是单线程,顺序执行还是无序执行以及是否依赖执行等),以及设置要执行的用例。

src.main.java.com.bestpay.test.common: 提供公共使用的方法和类。

src.main.java.com.bestpay.test.utils: 这个包主要是封装了各种工具类。

src.main.resources: 存放Dubbo Spring配置文件、指定excel配置文件,以及日志配置文件。

pom.xml: maven的配置文件,项目核心配置,用于构建项目、自动下载项目依赖以及和testng、jenkins配合持续集成等。

3.3 Dubbo介绍

Dubbo采用全Spring配置方式,基于Spring的Schema扩展进行加载Dubbo的配置。Dubbo服务提供者会将自己的提供出来的服务注册到zookeeper中心,我们的测试工程模拟的角色是服务消费者,需要在dubbo配置文件中配置注册中心zookeeper的地址和即将测试的目标接口。

测试一个服务接口,需要以下几步:

1.到Maven私服系统中获取到maven依赖描述。

2.到Maven配置文件pom.xml中,将依赖描述增加到dependency里。

3.在Dubbo Consumer Spring配置文件中增加测试接口申明。

4.通过Spring容器获取测试类的实例化对象

5.做好以上几步之后就可以编写测试代码。

3.4 数据参数化

在自动化领域里,提倡把测试用例和测试数据分开处理。无论是进行自动化测试还是手工测试,我们都需要设计测试用例、准备测试数据。

可以将测试数据存储到excel、csv、txt、数据库等,本项目中我们使用的是Excel。工程中,我们把需要参数化的数据写在EXCEL里,并给它们赋予不同的数据组合,在运行脚本时调用。每一行Excel数据就是一种参数化的数据组合、就是一条测试用例。

Excel格式如下图:

 运行测试时,通过TestNG中的DataProvider将Excel中的数据读取到Map中作为执行测试用例的数据来源。TestNG会将一条测试用例作为一个测试用例进行测试。

3.5 项目代码托管

我们使用Git进行团队开发过程中托管代码的工具。如果一位新成员想要获取我们的工程代码,需要把它拉取(Clone)到本地,如果某位成员本地修改了代码,需要提交(push)到git远程仓库,仓库的代码才会更新成最新的。其他成员就可以从git远程仓库拉取最新提交的代码。这样就能保证多人协作开发同一个项目。

Git的常用命令介绍如下:

1. 克隆远程仓库中的代码至本地,并进入工程目录:

$ git clone ssh://git@116.228.151.221:20022/test/testng-project.git

$ cd testng-project

2.在本地新建一个自己的分支:

$ git branch newBranchDll

3.切换至自己分支:

$ git checkout newBranchDll

(2和3可以合并为一个命令:

$ git checkout -b newBranchDll

)

4. 查看本地分支:

$ git branch

5. 查看远程分支:

$ git branch -r

6. 本地有了一些修改,提交至远程分支可以分为以下几步,期间可以n次执行$ git status查看当前状态:

(1) 确认当前分支不是在master主分支,而是在自己的分支:

$ git status

(2) 把文件修改添加到暂存区:

$ git add . (点表示所有)

(3) 把暂存区的所有内容提交到当前分支:

$ git commit -m 'commit comments'

(4) 将本地自己的分支与远程master主分支合并:

$ git pull --rebase origin master

此处可能有冲突(两个人对同一个文件有所修改),需要找到另外一个修改者协商解决冲突。

6.5 把本地分支的内容提交到远程分支:

$ git push origin newBranchDll

6.6 到git lab中确认能否看到此次push。

6.7 在git lab上创建一个Merge Request。

4.使用TestNG进行Http和Soap协议接口测试

4.1 项目工程结构图

项目工程结构图如下:

4.2 项目框架介绍

  1. Utils: 工具类,包括日期格式化,读取Excel, 解析json, 解析xml, 获取Spring Bean类,MAC校验和3DES加密算法类,随机数生成类Generator.java,以及对象初始化类ObjectInitializer.java。这里面的内容除非有新需求,一般不需要更改。
  2. Common -> Http -> request: 这里面的Request.java是HttpRequest.java和SOAPRequest.java的父类,Request.java是一个定义请求报文模型的抽象类,HttpRequest.java和SOAPRequest.java负责生成http请求报文体。
  3. Common -> Http -> service: 该包中只有一个Service.java类,该类负责发送请求报文和接收返回报文。
  4. Entity.webgate -> refund:每个接口下都会有三个类文件:XXXInfo.java, XXXRequest.java, XXXService.java。此处仅以refund接口的测试脚本为例。

a. XXXInfo.java类里面定义了需要发送的请求参数模型,该类中引用了Lombok包,通过添加@Data, @Getter或@Setter等注释可以不需要手动写get和set方法,在别处调用的时候就可以使用该类中get属性和set属性方法。 该类中定义的所有属性和值都会作为参数发送给服务器。

b. XXXRequest.java类继承自HttpRequest.java或者SOAPRequest.java 同时实现了加密接口Encrypt。由于退款接口是基于Soap协议的Web Service接口,所以RefundRequest.java继承自SOAPRequest.java。基于Http协议的接口Request类就继承自HttpRequest.java。在该类中会针对不同的接口要求进行MAC校验或者3DES加密。

c. XXXService.java类继承自Service.java。负责发送请求报文和接收处理返回报文。

5.applicationContext.xml: 该文件是Spring框架中的配置文件。该文件中进行各个接口请求的请求实现类和uri参数配置,在utils -> spring ->BeanUtils.java会使用该文件进行初始化,获取Bean容器的实例,在XXXService.java和XXXRequest.java中使用。

6.test.properties: 该文件中配置了测试环境的host, port, namespace等参数,在applicationContext.xml使用到。

4.3 数据流介绍

批量执行的测试数据准备在TestData.xlsx中,通过test case类中添加了@DataProvider注释的方法从Excel中读取。单独执行的测试用例数据在main方法中。

在Test Case中调用XXXService.java的post方法发送报文的时候,都会传递一个map类型的数据过去。XXXService.java中post方法会实例化一个XXXInfo.java对象和一个XXXRequest.java对象,分别调用utils工具类中的对象初始化类ObjectInitializer.java将map类型的数据分别赋给XXXInfo.java和XXXRequest.java的实例(如下图代码所示),并且将Info数据类型设置给request对象。XXXRequest.java类对传递过来的Info数据进行对应的MAC校验和3DES加密。同时XXXRequest.java的父类(HttpRequest.java或SOAPRequest.java)会生成对应协议的报文Body。

之后XXXService.java中会调用Service.java父类中的doPost方法封装整体报文并进行发送, 然后将接收到的Response返回。 报文的URL由Spring配置中对应的request的host,port,url和uri拼接而成,报文的headers也是从Spring配置中对应的request的headsers获取,报文的body通过调用HttpRequest.java或SOAPRequest.java中被重写的的getRequestsBody()方法获得。

Test Case类中会接收到服务器端的Response, 并根据不同接口的定义进行相关比较和断言,TestNG会根据设定的断言判断该测试用例是失败还是成功,并生成测试报告。

4.4 新建测试用例

在这个代码框架中,如果有一个新的接口需要写测试用例,需要涉及的地方有如下几个文件:

1./src/test/TestXXX.java

该测试用例中进行测试数据赋值,调用XXXService.java发送数据并验证Response。

2.XXXInfo.java

该类中定义测试该接口需要发送的参数。

3.XXXRequest.java

该类中定义该接口所需要进行的MAC校验和3DES加密。

4.applicationContext.xml和test.properties

每增加一个接口,都需要在该文件中增加该接口的Request类的配置。该文件中定义的url和uri,以及test.properties文件中定义的host和port,在更换测试页面或测试环境的时候需要做相应修改。

5.XXXService.java

该类中调用XXXInfo.java和XXXRequest.java,调用父类的发送方法,并处理Response.

6.TestData.xlsx

在该Excel中设计测试数据。

4.5 运行测试

4.5.1 在方法名上右击运行

4.5.2 在Test Case类上右击运行

4.5.3 在test suite xml 文件上右击运行

4.5.4 运行maven Test

点击IDEA左下角快捷图标,打开Maven Projects导航页。

在pom.xml中指定运行的test suite xml文件。然后在项目Lifecycle目录下双击test运行Maven测试。

5. 使用TestNG结合Selenium进行Web UI自动化测试

5.1 测试框架整体设计图

5.2 项目工程结构图

 com.bestpay.test.ui.common.base:存放基础类,里面有个基类BaseTest.java.这个类的主要作用是启动和关闭浏览器,启动浏览器使用了TetsNG的@BeforeClass ,在这个注释下写了driver的初始化以及打开浏览器等操作;关闭浏览器使用了TestNG的@AfterClass,在这个注释下写了driver退出的操作。测试用例中则是以@Test注释为主体的,在@Test注释下,书写了完整的测试步骤。测试用例继承这个基类,这样在运行测试类的时候,它先会去基类中找@BeforeClass下的代码去执行,然后再去执行@Test的内容,最后在执行@AfterClass的内容。

pom.xml:maven的配置文件,项目核心配置,用于构建项目、自动下载项目依赖以及后续的和testng、jenkins配合持续集成等。

5.3 页面对象模型

在开发一个 Selenium WebDriver 测试时,我们可以使用页面对象模型。这个模型可以使测试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来,将页面元素和针对相关页面元素的操作方法封装成一个Java类。对象模型也提供了一个注释,帮助缓存远程,避免出现元素过期的问题。每一个java类,都是一个页面,存放的都是对应页面的所有元素以及元素的相关操作。

5.4 定位页面元素方法

1. 定位元素辅助工具

IE中在元素上右击 ->  “检查元素”,或按F12键打开开发者工具。

Chrome中在元素上右击 -> “审查元素”,或按F12键打开开发者工具。

Firefox中在元素上右击 -> “检查元素”,或安装插件Firebug打开开发者工具。

Firebug下载地址: http://getfirebug.com/

Firefox中还可以安装xPathChecker通过xpath定位页面上元素。

下载地址:https://addons.mozilla.org/zh-CN/firefox/addon/xpath-checker/

使用时候只要把firebug的箭头放到要定位的元素上,就可以得到该元素对应标签的值,其他浏览器中类似。如图:

2.查找方法

以翼支付门户网站为例,演示通过name, id, class, linkText, partialLinkText, css selector等属性来定位这个输入框和登录按钮。

// <input name="productNo" id="phoneNo" type="text" maxlength="11" class="ui-txtinput01" autocomplete="off" value="请输入手机号"/>

/**

* <li class="login-btn01">

<a class="ui-button ui-button-morange ui-loginbutton" id="telLoginButtn" href="javascript:void(0);">登&nbsp;&nbsp;录</a>

</li>

*/

(1) 通过id查找是最有效、最方便的方法

WebElement phoneNoById = driver.findElement(By.id("phoneNo"));

WebElement loginById = driver.findElement(By.id("telLoginButtn"));

(2) 通过name查找,跟id类似的方法

WebElement phoneNoByName = driver.findElement(By.name("productNo"));

(3) 通过class name查找,对某些具有相同类的元素一网打尽的好方法,如果整个页面只有一个元素使用了该class也可以使用。

WebElement phoneNoByClassname = driver.findElement(By.className("ui-txtinput01"));

(4) 通过link text 和 partial link text查找,用在定位超链接上比较多。

WebElement loginByLinkedText = driver.findElement(By.linkText("登 录"));

WebElement loginByPartialLinkText = driver.findElement(By.partialLinkText("登"));

(5) 通过css selector查找也是常用的查找方法,各种浏览器支持都很好,查找速度很快。

WebElement loginByCssSelector = driver.findElement(By.cssSelector("a.ui-button.ui-button-morange.ui-loginbutton"));

概述:

定位id为flrs的div元素,可以写成:#flrs, 注:相当于xpath语法的//div[@id=’flrs’]

定位id为flrs下的a元素,可以写成 #flrs > a,  注:相当于xpath语法的//div[@id=’flrs’]/a

定位id为flrs下的href属性值为/forexample/about.html的元素,可以写成: #flrs > a[href=”/forexample/about.html”]

如果需要指定多个属性值时,可以逐一加在后面,如#flrs > input[name=”username”][type=”text”]

(6) 通过xpath查找是万不得已的方法,在以上几种方法都无法找到的时候使用xpath查找,几乎可以定位到页面上的任意元素,但定位性能不是很好,所以还是尽量少用。可以使用Firefox中所安装的xPathCecker插件检查xpath是否正确。绝对路径以单/号表示,相对路径则以//表示。当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。而当/出现在xpath路径中时,则表示寻找父节点的直接子节点,当//出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点,不管嵌套了多少层级。

WebElement phoneNoByXpath1 = driver.findElement(By.xpath("//input[@id='phoneNo']"));

WebElement phoneNoByXpath2 = driver.findElement(By.xpath("//input[@name='productNo']"));

WebElement phoneNoByXpath3 = driver.findElement(By.xpath("//input[@class='ui-txtinput01']"));

WebElement loginByXpath1 = driver.findElement(By.xpath("//a[contains(@href, 'javascript')]"));

WebElement loginByXpath2 = driver.findElement(By.xpath("//a[starts-with(@class,'ui-button')]"));

(7) 当要定位一组元素相同元素时,除了通过name查找还可以通过tagName查找。该方法通过元素的标签名称来查找元素,搜索到的元素通常不止一个,所以一般结合findElements方法来使用。

List<WebElement> buttons = driver.findElements(By.tagName("button"));

List<WebElement> inputs = driver.findElements(By.tagName("input"));

List<WebElement> aLinks = driver.findElements(By.tagName("a"));

(8) 有些特别的元素,如翼支付首页面上鼠标悬浮在“生活服务”上时“水电煤缴费”才会显示,查找困难,可以直接在driver中执行js代码。

// <a class="header-tab-a" href="/appcenter/lifepay/water">水电煤缴费</a>

JavascriptExecutor js = (JavascriptExecutor) driver;

String myjs="document.getElementsByClassName('header-tab-a')[0].click()";

js.executeScript(myjs);

(9) 有些页面使用了iframe控件来访问另外一个网页,iframe控件中的元素不能直接找到,必须要先switch到iframe中才能找到。

WebElement elementInFrame = driver.switchTo().frame("frameID").findElement(By.xpath("//a[@id='signIn']/input"));

如果一个网页有个frame内部还内嵌了一个frame,就需要先switch到第一个frame,再switch到第二个frame。

//先找到ifrome1(id = f1)

driver.switchTo().frame("f1");

//再找到其下面的ifrome2(id =f2)

driver.switchTo().frame("f2");

//下面就可以正常的操作元素了

driver.findElement(By.id("kw")).sendKeys("selenium");

driver.findElement(By.id("su")).click();

10. webdriver常常在元素还没有加载出来就查找,会出现Cannot find elements错误。此时可以通过3种等待方式让webdriver稍等一会。

显式等待,就是要等到代码中使用了显式等待的元素满足指定的ExpectedCondition,等不到,就一直等,除非在规定的超时时间之内都没找到,那么就跳出Exception.

WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("")));

有很多显示等待的等待条件可以设置,具体查见ExpectedConditions类的方法:

隐式等待是针对webdriver设置的,webdriver查找任意一个元素时,如果找不到都会等待此处设置的时间。

driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);

线程等待是让程序等待一个固定的时间。

Thread.sleep(waitTime)

6. 环境搭建

6.1 配置Java环境

1.安装JDK(Jdk7或Jdk8),下载地址:

Java Downloads | Oracle

2.新建一个环境变量JAVA_HOME,指向jdk的安装目录,如C:\Program Files\Java\jdk1.7.0_75。

3.在Path变量中加入%JAVA_HOME%\bin和%JAVA_HOME\jre\bin,以分号隔开。

4.打开一个cmd,执行java –version, 显示java版本号表明java安装成功。

6.2 配置Maven环境

1. 下载与IDEA版本兼容的Maven(IDEA13与Maven3.3不兼容,与Maven3.1兼容;IDEA14与Maven3.3兼容),下载地址:

Maven – Download Apache Maven

2.将Maven解压至不易被动的目录,如C:\Program Files\Java\apache-maven-3.3.3.

3,新建一个环境变量M2_HOME,指向解压后的Maven目录,如C:\Program Files\Java\apache-maven-3.3,在Path变量中加入%M2_HOME%\bin。

 4.\\192.168.106.99\软件共享\测试工具\Maven路径下settings.xml文件分别拷贝到以下两个路径,该文件中配置Maven下载依赖包的服务器地址:

a. C:\Users\User_Name\.m2

b. path\to\apache-maven-3.3.3\conf

5. 打开一个cmd,执行mvn –v, 显示maven版本号表明Maven安装成功。

6.3 准备Intellij IDEA开发工具

1.安装Intellij IDEA,下载地址:

Download IntelliJ IDEA – The Leading Java and Kotlin IDE

2.填入注册码打开IDEA。

新建一个工程或导入一个已有工程。

6.4 IDEA中安装Lombok插件

1. 在IDEA中, 打开 File -> Settings

2. 进入Plugins, 点击”Browse repositories”, 搜索到Lombok进行安装。如果直接安装不行,就到官网上Project Lombok下载一个兼容的lombok  jar包,到此处点击”Install from disk…”进行安装。

6.5 IDEA中配置Maven

1. 在IDEA中, 打开 File -> Settings

2. 进入Build Execution Deployment -> Build Tools -> Maven, 可以通过Maven home directory选择使用自己安装的Maven(It’s up to you), 如果想修改用户配置文件和本地仓库的路径,可以覆盖User settings file和Local repository设置。

6.6 IDEA中配置Spring

1. 在IDEA中, 打开 File -> Project Structure, 或者直接点击IDEA右上角的快捷图标。

2. 进入Project Settings -> Modules, 点击加号将Spring添加进项目,右边选中项目和项目中的Spring配置文件applicationContext.xml,点击Apply, 点击OK.

6.7 IDEA中配置JDK

1. 在IDEA中, 打开 File -> Project Structure, 或者直接点击IDEA右上角的快捷图标。

2. 进入Platform Settings -> SDKs, 新建一个JDK, 指向JDK安装路径(即之前配置的JAVA_HOME路径)。

 3. 进入Project Settings -> Project, 选择上一步中添加的SDK, 点击Apply, 点击OK.

6.8 配置Git环境

1.在电脑所有应用程序中查找git bash. 确认本电脑是否安装了git bash. 如果没有安装,就安装一个与电脑配置相匹配的git。

git下载地址:

Git - Downloading Package

2. 通过以下命令确认git Lab上是否已经添加本台电脑的git ssh key.

$ git clone ssh://git@116.228.151.221:20022/test/testng-project.git

如果clone成功,表明git ssh key已经添加到git lab。不需要执行第3步。

如果提示权限不足,表明git ssh key还没有添加到git lab。执行第3步。

3. 配置git ssh key到git Lab

(1) git bash中使用以下命令生成ssh key。

$ ssh-keygen -t rsa (设置密码提示处按回车表示密码为空)。

(2) 在目录C:\Users\[当前登录用户名]\.ssh中打开文件id_rsa.pub.

 

到git lab中添加一个SSH key,将id_rsa.pub中所有内容复制过来保存即可。

Git lab 地址: http://116.228.151.221/users/sign_in

(3)  通过git clone命令确认git Lab上是否已经添加本台电脑的git ssh key.

$ git clone ssh://git@116.228.151.221:20022/test/testng-project.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度神经网络量化算法基础理论

关于量化&#xff0c;之前的博客中首先从第一个将量化思想应用在神经网络模型上的工作开始介绍&#xff0c;随后阐述了量化领域的极端情况&#xff0c;即二值化与三值化&#xff0c;并指出尽管目前已经存在多种对二值网络的优化方法&#xff0c;但是显然因极端量化带来的严重精…

Day45|70. 爬楼梯 (进阶)、 322. 零钱兑换 、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 1.题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;…

算法与数据结构(一)--算法复杂性

一.算法复杂性的概念 算法的复杂性是指运行算法所需要的计算机资源的量。需要的时间资源的量称为时间复杂性&#xff0c;需要的空间资源的量称为空间复杂性。 这个量应该集中反映算法的效率&#xff0c;而从运行该算法的实际计算机中抽象出来。换句话说&#xff0c;这个量应该…

[物理层]信道的极限容量

信道的极限容量 信号在传输过程中会受到各种因素的影响&#xff0c;会造成信号失真。 失真的因素&#xff1a; 码元传输速率信号传输距离噪声干扰传输媒体质量 因此&#xff0c;怎么提高信息的传输速率&#xff1f; 奈氏准则 [ 香农公式 提高信道的传输速率&#xff1a; …

【C语言初阶(12)】数组(超详解)

文章目录 前言1. 一维数组1.1 一维数组的创建1.2 一维数组的初始化1.3 一维数组的访问1.4 一维数组在内存中的存储 2. 二维数组2.1 二位数组的创建2.2 二维数组的初始化2.3 二维数组的访问 3. 数组越界4. 数组作为函数参数4.1 冒泡排序介绍4.2 冒泡排序函数的设计 5. 数组名6. …

短视频矩阵管理系统私信群聊功能源码开发分享

短视频获客工具的兴起&#xff0c;也有越来越多的企业及商家在发现了更多商机。除了在做短视频推广获客的同时&#xff0c;也有不少意向客户潜藏在评论区需要我们深度挖掘&#xff0c;那么对于一些流量比较高的账号&#xff0c;想在成千上万的评论区里挖掘意向客户&#xff0c;…

C#一个开源跨平台的 HTTP 客户端库——RestSharp

一、RestSharp简介 GitHub - restsharp/RestSharp: Simple REST and HTTP API Client for .NETSimple REST and HTTP API Client for .NET. Contribute to restsharp/RestSharp development by creating an account on GitHub.https://github.com/restsharp/RestSharp …

SpringBoot实战(十九)集成Ribbon

目录 一、负载均衡的分类1.服务端负载均衡2.客户端负载均衡 二、定义和依赖1.Ribbon2.Spring Cloud Ribbon3.Spring Cloud Loadbalancer 三、搭建测试项目1.Maven依赖2.yaml配置3.配置类4.启动类5.接口类 四、测试五、补充&#xff1a;认识 Ribbon 的组件 一、负载均衡的分类 …

knife4j实现微服务swagger文档聚合

使用knife4j实现分布式swagger文档聚合 在项目开发过程中,接口文档的使用是在所难免的,但是在微服务场景下,多个服务之间的swagger是分散的,虽然swagger提供了微服务的聚合方式,配置过于繁琐,加之swagger本身的功能比较少,而且ui布局也比较蛋痛,此处推荐一款新框架用于增强swa…

RestTemplate中exchange发起请求

RestTemplate中exchange简单使用 简介什么是RestTemplate 常用方法实战 简介 在项目中&#xff0c;我们可能需要发起HTTP请求&#xff0c;请求目标URL来获取响应数据做一些处理。就需要用到HTTP请求工具&#xff0c;常用的Java类工具有&#xff1a;HttpUrlConnection、Apache …

[TIFS 2023] 用增强压缩感知做安全模型对比联邦学习

Secure Model-Contrastive Federated Learning With Improved Compressive Sensing | IEEE Journals & Magazine | IEEE Xplore摘要&#xff1a; 联邦学习&#xff08;FL&#xff09;已广泛应用于金融风险控制、电子政务、智慧医疗等各个领域。为了保护数据隐私&#xff0…

Leetcode每日一题:167. 两数之和 II - 输入有序数组(2023.7.8 C++)

目录 167. 两数之和 II - 输入有序数组 题目描述&#xff1a; 实现代码与解析&#xff1a; 暴力&#xff08;超时&#xff09; 双指针 原理思路&#xff1a; 二分 原理思路&#xff1a; 167. 两数之和 II - 输入有序数组 题目描述&#xff1a; 给你一个下标从 1 开始的…

MySQL性能瓶颈定位慢查询

目录 1 性能优化的思路2 引言3 MySQL慢查询日志3.1 慢查询参数3.2 开启慢查询日志&#xff08;临时&#xff09;3.3 开启慢查询日志&#xff08;永久&#xff09;3.4 慢查询测试 4 MySQL性能分析 EXPLAIN4.1 概述4.2 EXPLAIN字段介绍4.2.1 id字段4.2.2 select_type 与 table字段…

Leetcode-每日一题【21.合并两个有序链表】

题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 []输出&#xff1a;…

1.Git使用技巧-常用命令1

Git使用技巧-常用命令 文章目录 Git使用技巧-常用命令一、git 创建仓库demo 二、本地仓库常用命令提交详解git commitgit commit --amend 三、 推送到远程分支git push 总结参考 一、git 创建仓库 创建远端仓库&#xff1a; git init – bare // 创建远端裸仓库&#xff1b; 远…

【华为机试】HJ16 购物单详解+完整源代码示例

从毕业到入职&#xff0c;忙于各种事情&#xff0c;所以博客一直也没有空更新。从入职到现在差不多整三个月了&#xff0c;刚刚在比亚迪这边转正。目前干的工作涉及到开发的工作不是很多&#xff0c;但是又怕之前的技能荒废了。所以最近有个想法&#xff0c;再把C算法和数据结构…

Android Zygote 启动流程

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: Android系统包含netd、servicemanager、surfaceflinger、zygote、media、installd、bootanimation 等基本服务&#xff0c;具体作用请看下图。 Android…

English Learning - L3 作业打卡 Lesson8 Day60 2023.7.5 周三

English Learning - L3 作业打卡 Lesson8 Day60 2023.7.5 周三 引言Part 1 总结&#x1f349;句1: 11 years ago, when I lost my legs, I had no idea what to expect.成分划分连读爆破语调 &#x1f349;句2: But if you ask me today, if I would ever want to change my si…

java+Mysql 图书管理系统(idea)

目录 前言 部分界面截图 登录界面 注册界面 图书管理界面 关于我们界面 部分代码 登录界面 数据库工具类 前言 jdk 版本&#xff1a;openjdk version "11.0.12" MySql版本&#xff1a;5.7.40 加&#xff08;vx&#xff1a;lixuanzi0521&#xff09;帮调试 …

递推--Fibonacci数列 II

描述 众所周知&#xff0c;Fibonacci数列是一个著名数列。它的定义是&#xff1a; 本题要求采用第二种方法&#xff1a;递推。 输入描述 每行一个整数 i &#xff0c;表示 Fibonacci 数列的第i项。 i ≤ 100000 对比前一题&#xff0c;本题的数据规模是 十万 &#xff01; …