精华内容
下载资源
问答
  • javaWeb--API 自动化测试框架分享

    千次阅读 2015-11-04 12:29:54
    目前在做接口测试方面的工作,结合部门现状,初步整理及搭建了api的自动化测试框架,现在把我的思路、框架结构和大家分享出来,一方面希望可以为大家提供一些参考,另一方面也希望大家多提意见,以便测试框架的改进~...

    转载地址:https://testerhome.com/topics/3572


    目前在做接口测试方面的工作,结合部门现状,初步整理及搭建了api的自动化测试框架,现在把我的思路、框架结构和大家分享出来,一方面希望可以为大家提供一些参考,另一方面也希望大家多提意见,以便测试框架的改进~~

    主要目的:

    1, 各版本用例管理
    2, 结构验证、节点数据正确性校验
    3, 简单业务逻辑覆盖
    4, 各版本回归性测试
    5, 线上环境监控及预警

    大体构建流程:

    a.接口所涉及的信息都以数据结构形式进行存储。

    考虑到接口返回值一般都较庞大、逻辑关系较复杂,如果单靠人工进行采集的话工作量非常巨大,为了缓解压力提供了通过json串解析输出结构的功能。

    b.接口测试用例的管理,支持自动、手工执行的case录入。对正常、异常状态的验证。

    将收集的输入、输出数据以树型结构展现,通过简单的勾选来完成测试用例的输入参数及预期输出结构进行关联。

    c.测试用例的输入参数除可输入外,也支持与上行接口的输出参数进行关联。

    在执行测试用例时,自动执行上行接口,取得相应节点对应值,自动赋予当前用例接口参数。

    比如有些接口需要在登陆的情况下去操作,那么就可以配置上行接口,模拟登陆,然后取得登陆key,用key做为参数去执行用例。

    e.接口支持以版本号、单接口、多接口的模式执行测试。

    将接口各用例的执行情况(接口耗时 、成功与否、失败原因、异常节点等)信息,记入日志管理模块,同时为测试人员提供测试结果查询页面,对测试结果做大体的分析,尽可能的帮助测试人员去定位接口中存在的问题。

    f.对于频繁变动的接口,影响范围又比较模糊,完全可以以大版本进行自动化回归测试,排查影响范围,以减少人工遗漏。

    g.支持接口返回值规则进行验证,输入节点与规则配置进行绑定后,执行过程中系统会自动取出相应节点值进行规则验证。(集合、长度、类型、格式等)

    除了对输出结果进行简单的规则验证外,也支持输入参数集合绑定,可以对集合内所有项进行循环调用、循环验证排查。

    h.可以对接口进行日常巡检标识,对于有巡检标识的接口,系统会每天定时排查这些接口,协助线上环境监控及预警及记入日志管理模块。


    主要以web页面进行操作,通过服务地址,就可以访问自动化测试平台。
    测试人员只要对接口有基本了解,就可以使用自动化测试平台,自行录入、执行测试。

    展开全文
  • Java+webdriver的自动化测试框架搭建

    千次阅读 2018-09-28 10:42:54
     webdriver是一种支持web应用程序自动化测试的工具,利用浏览器原生的API,封装成一套更加面向对象的selenium webdriver API,直接操作浏览器里的元素。除了必要的浏览器驱动外,webdriver不需要启动其他任何程序,...

    、webdriver简介

        webdriver是一种支持web应用程序自动化测试的工具,利用浏览器原生的API,封装成一套更加面向对象的selenium webdriver API,直接操作浏览器里的元素。除了必要的浏览器驱动外,webdriver不需要启动其他任何程序,不依赖于任何测试框架。

        webdriver直接利用浏览器的native support来操作浏览器,所以对于不同类型的浏览器,必须依赖一个特定版本的driver来实现调用。

    二、webdriver原理

           在new一个webdriver的过程中,webdriver会先确认本地是否存在可用且版本匹配的驱动;如果存在可用的driver,会在目标浏览器中启动一整套的web service,这套web service使用了webdriver自定义的协议,称为The webdriver wire protocol。该协议可以驱动浏览器进行任何操作,包括打开,关闭、元素定位等。

    三、Java+webdriver的自动化测试环境搭建

    1、配置Java环境:

    访问https://www.oracle.com/technetwork/java/javase/downloads/index.html;下载并安装jdk,配置Java环境变量;

    2、安装eclipse编译工具:

    https://www.eclipse.org/downloads/

    3、下载webdriver的三个jar包

    selenium-server-standalone-2.45.0.jar

    selenium-java-2.45.0-srcs.jar

    selenium-java-2.45.0.jar

    selenium官网下载地址:https://www.seleniumhq.org/download/

    百度网盘下载地址:链接:https://pan.baidu.com/s/1kG1CeZ-Nw9DavPng-Lyazg 密码:y2cz

    4、本地浏览器驱动下载

    selenium官网下载地址:https://www.seleniumhq.org/download/

       

    5、eclipse配置

    新建Java工程helloworid:File-new-Java project;

    导入jar包:右击helloworld工程,选择build path,add external archives导入webdriver的jar包;

    新建class类:右击helloworld工程,选择new-class,输入名称HelloworldMain,点击finish;

    至此,webdriver+Java自动化测试整体框架已经搭建完成;接下来是如何调用浏览器,使其自动化运行

    6、代码添加与执行

    在HelloworldMain.java中添加如下代码:

    System.setProperty("webdriver.chrome.driver","D:\\chromedriver.exe");  //调用本地driver
    ChromeOptions options = new ChromeOptions();
    options.setBinary("D:\\chrome.exe");  //调用浏览器

    webDriver dr=new ChromeDriver(options);new一个webdriver

    dr.get("https://www.baidu.com");访问百度

    添加完以上代码之后,运行Java工程,选择run as-Java application即可。

     

     

    展开全文
  • http接口测试—自动化测试框架设计

    千次阅读 2018-03-05 14:29:32
    一、测试需求描述 对服务后台一系列的http接口功能测试。 输入:根据接口描述构造不同的参数输入值(Json格式) 输出:字符串(传入的方式+传入的字符串) http://localhost:8090/lctest/TestServer  二、程序设计 ...

    一、测试需求描述

        对服务后台一系列的http接口功能测试。

        输入:根据接口描述构造不同的参数输入值(Json格式)

        输出:字符串(传入的方式+传入的字符串)

        http://localhost:8090/lctest/TestServer

     

     

    二、程序设计

        1、Client程序设计

            读取Excel配置的测试用例数据

            发送参数Json格式给Server,接收Server的返回数据

            进行数据比对校验,返回测试结果,将数据插入到Excel中

        2、Server端程序设计

            接受Client的参数,进行解析

            发送返回数据给client

     

     

    三、实现方法

        1、选用Java脚本来驱动测试

        2、采用Excel表格管理测试数据,包括用例的管理、测试数据录入、测试结果显示等等,这个需要封装一个Excel的类。

        3、调用http接口采用java自带的的API

        4、测试需要的将参数转化成字符串

        5、通过预期结果和实际结果的对比,将实际结果和对比结果写入Excel用例中,这里封装了一个类

        6、首次执行测试采用人工检查输出的是否正确,一旦正确写入Excel的期望结果中,如果发现错误手工修正为预期文件。

    四、Excel表格设计

     

    五、代码结构

    六、实现代码

    1、ExcelUtil.java

        

    package client;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    
    public class ExcelUtil {
    	
    	//读取Excel中数据
    	public static List<Param> read() throws Exception{
    		 HSSFWorkbook wb = new HSSFWorkbook();
    		 HSSFSheet s = wb.createSheet();
    		 HSSFRow row = s.createRow(0);
    		 HSSFCell cell = row.createCell((int)0,0);
    
    		 //------------从xls读出数据
    		 wb = new HSSFWorkbook(new FileInputStream("D:\\learn\\test.xls"));
    		 s = wb.getSheetAt(0);
    		 
    		 //获得EXCEL行数
    		 int rowNums=s.getLastRowNum();
    		 //获得Excell列数
    		 //int columnNum=r.getPhysicalNumberOfCells();
    		 
    		 List<Param> params=new ArrayList<Param>();
    		 for(int i=1;i<=rowNums;i++){
    			 HSSFRow r = s.getRow(i);
    			 cell=r.getCell(0);
    			 Param param= new Param();
    			 param.setNo(r.getCell(0).getStringCellValue());
    			 param.setName(r.getCell(1).getStringCellValue());
    			 param.setAge(r.getCell(2).getStringCellValue());
    			 param.setSex(r.getCell(3).getStringCellValue());
    			 param.setExpResu(r.getCell(4).getStringCellValue());
    //			 System.out.println(cell.getRichStringCellValue());
    			 params.add(param);
    		 }
    		 return params;
    
    	}
    
    	/**
    	  * 写入Excel,在任意坐标处写入数据。
    	  * String value:你要输入的内容
    	  * int x :行坐标,Excel从 0 算起
    	  * int y   :列坐标,Excel从 0 算起
    	  */
    		public static void writeCell(String filePath,int x,int y,String value) {
    			try {
    				// 创建Excel的工作书册 Workbook,对应到一个excel文档
    				HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));
    				HSSFSheet sheet=wb.getSheetAt(0);
    				HSSFRow row=sheet.getRow(x);
    				HSSFCell cell=row.getCell((short) y);
    				cell.setCellValue(value);
    				FileOutputStream os;
    				os = new FileOutputStream(filePath);
    				wb.write(os);
    				os.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    
    		}
    }

     

    2、JsonsUtil.java

        

    package client;
    
    
    import java.text.ParseException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    /**
     * 使用json-lib构造和解析Json数据
     */
    public class JsonsUtil {
    
        /**将Bean转换成Map
         * 将Map转换Json数据
         */public static String BuildJson(Param param) throws JSONException {
    
            
        	 Map<StringString> map1 = new HashMap<StringString>();
             map1.put("no", param.getNo());
             map1.put("name", param.getName());
             map1.put("age", param.getAge());
             map1.put("sex", param.getSex());
    //         map1.put("expResu", param.getExpResu());
        	 // JSON格式数据解析对象
            JSONObject jo = new JSONObject();
            // 将Map转换为JSONArray数据
            JSONArray ja = new JSONArray();
            ja.put(map1);
    //        System.out.println("JSONArray对象数据格式:"+ja.toString());
            jo.put("map", ja);
    //        System.out.println("最终构造的JSON数据格式:"+jo.toString());
            return jo.toString();
    
        }
    
        /**
         * 解析Json数据
         *
         */public static JSONArray ParseJson(String jsonString) throws JSONException,
                ParseException {
    
            JSONObject jo = new JSONObject(jsonString);
            JSONArray ja = jo.getJSONArray("map");
    //        System.out.println(ja.getJSONObject(0).getString("name"));
            return ja;
        }
    }

     

    3、Param.java

    package client;
    
    public class Param {
    	
    	String no;//编号
    	String name;//姓名
    	String age;//年龄
    	String sex;//性别
    	String expResu;//期望结果
    	String actResu;//实际结果
    	String pass;//是否通过
    	String desc;//描述
    	
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	
    	public String getNo() {
    		return no;
    	}
    
    	public void setNo(String no) {
    		this.no = no;
    	}
    
    	public String getAge() {
    		return age;
    	}
    
    	public void setAge(String age) {
    		this.age = age;
    	}
    
    	public String getSex() {
    		return sex;
    	}
    
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    
    	public String getExpResu() {
    		return expResu;
    	}
    
    	public void setExpResu(String expResu) {
    		this.expResu = expResu;
    	}
    
    	public String getActResu() {
    		return actResu;
    	}
    
    	public void setActResu(String actResu) {
    		this.actResu = actResu;
    	}
    
    	public String getPass() {
    		return pass;
    	}
    
    	public void setPass(String pass) {
    		this.pass = pass;
    	}
    
    	public String getDesc() {
    		return desc;
    	}
    
    	public void setDesc(String desc) {
    		this.desc = desc;
    	}
    }

     

    4、CompareRes.java

        

    package client;
    
    public class CompareRes {
    
    	int actResuNo=5;//测试结果在第五例
    	int passNo=6;//对比结果在第六列
    	
    	public  void compare(String filePath,Param param,String actResu){
    		
    		ExcelUtil.writeCell(filePath,Integer.parseInt(param.getNo()),actResuNo,actResu);
    		if(param.getExpResu().trim().equals(actResu)){
    			ExcelUtil.writeCell(filePath,Integer.parseInt(param.getNo()),passNo,"Y");
    		}else{
    			ExcelUtil.writeCell(filePath,Integer.parseInt(param.getNo()),passNo,"N");
    		}
    	}
    }

     

    5、TestClient .java

    package client;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    
    public class TestClient {
    	
    	public static void main(String[]agrs){
    		TestClient a=new TestClient();
    		try {
    			a.client();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public void client() throws Exception{
    		
    		List<Param> params = ExcelUtil.read();
    		for(Param pa:params){
    			try {
    				// 接报文的地址
    				String filePath="D:\\learn\\test.xls";
    				String param= new JsonsUtil().BuildJson(pa);
    				URL serverUrl= new URL("http://localhost:8090/lctest/TestServer");
    
    				URLConnection uct= serverUrl.openConnection();
    				HttpURLConnection hutc=(HttpURLConnection)uct;	
    				// 设置报文参数
    				hutc.setRequestMethod("POST");
    				
    				// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false; 
    				hutc.setDoOutput(true);
    				
    				// 设置是否从httpUrlConnection读入,默认情况下是true
    				hutc.setDoInput(true);	
    //				hutc.setAllowUserInteraction(true);
    				
    				// 开启流,写入数据data
    				OutputStream out=hutc.getOutputStream();
    				
    				out.write(param.getBytes("UTF-8"));
    				out.flush();
    				out.close();
    				
    				// 获取返回的数据	
    				StringBuffer buffer=new StringBuffer();
    				BufferedReader reader = null;
    				InputStream ins=hutc.getInputStream();
    				reader = new BufferedReader(new InputStreamReader(ins,"UTF-8"));
    				String sg=reader.readLine();
    				if (sg!= null){
    			           buffer.append(sg);
    			     }
    			        System.out.println("接收返回值:" + buffer);
    			        new CompareRes().compare(filePath, pa, buffer.toString());
    				
    				
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    	
    	}
    }

    6、TestServer

    public class TestServer extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	 private static JSONArray ja;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public TestServer() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		try {
    			this.excute(request, response);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		try {
    			this.excute(request, response);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public void excute(HttpServletRequest request,HttpServletResponse response) throws Exception{
    		request.setCharacterEncoding("utf-8");
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/xml");
    		String method=request.getMethod();
    		String url=request.getRequestURI();
    		String param;
    	       // 获取收到的报文
            BufferedReader reader = request.getReader();
            String line = "";
            line = reader.readLine();
            ja=new JsonsUtil().ParseJson(line);		
    		StringBuffer resultBuffer=new StringBuffer();
    		resultBuffer.append("访问方式"+method+"访问成功");
    		resultBuffer.append("接收到的数据:"+line);
    		PrintWriter out =response.getWriter();
    		out.println(resultBuffer.toString());
    		out.flush();
    		out.close();
    		
    	}
    }

    7、web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <servlet>
        <servlet-name>TestServer</servlet-name>
        <servlet-class>com.servlet.TestServer</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>TestServer</servlet-name>
        <url-pattern>/lctest/TestServer</url-pattern>
      </servlet-mapping>
    </web-app>
    展开全文
  • 1. 创建一个Gradle projectfile--&gt;new--&gt;Other--&gt;Gradle Project2. 修改build.gradle // plugin  apply plugin: 'java'  apply plugin: 'eclipse'  apply plugin: 'idea' // ...

    1. 创建一个Gradle project

    file-->new-->Other-->Gradle Project


    2. 修改build.gradle

          // plugin

      apply plugin: 'java'

      apply plugin: 'eclipse'

      apply plugin: 'idea'

          // repositories

               repositories { 

                 mavenCentral()

                }

          // configurations

               configurations {

                cucumberRuntime {

                  extendsFrom testRuntime

                   }

                }  

         // dependencies

              dependencies {

                   compile 'org.springframework:spring-context:4.2.1.RELEASE'

                 compile 'log4j:log4j:1.2.17'

                 compile 'junit:junit:4.12'

                 compile 'org.apache.commons:commons-lang3:3.0'

                 compile 'org.seleniumhq.selenium:selenium-java:3.4.0'

                 compile 'info.cukes:cucumber-core:1.1.2'

                 compile 'info.cukes:cucumber-java:1.1.2'

                 compile 'info.cukes:cucumber-junit:1.1.2'

                }

          // create gradle task,verify env is ok

               task helloWorld << {

                 println("hello world")   

                }

    3. 验证环境

         1). cd /Users/mobiletest-26/eclipse-workspace/FirstGradle

            2). gradle build

            3). gradle helloWorld

         如果可以在命令行中看到输出 hello world,那么搭建的环境是ok的

    4. Gradle java项目必须按照一定的格式构建请按照下图创建目录

         示例:注册一个百度账号
        

          1). 在build.gradle中新建一个gradle task

             task baidu() {

                     dependsOn assemble, compileTestJava

                     doLast {

                          javaexec {

                          main = "cucumber.api.cli.Main"

                          classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output            

                          args = ['-f', 'pretty', '--glue', 'gradle.cucumber', 'src/test/java/resources/cucumber/baiduAccount.feature']   

                           }

                       }

                  }   

          2). 在resources/cucumber下新建一个feature文件

            

             Feature: Register a baiDu user 

                 @Test

                 Scenario Outline: Register two new user in baidu  

            Given the page is open "https://passport.baidu.com/v2/?reg&tt=1521992892277&overseas=undefined&gid=B2CD3CB-E56D-4A02-A21B-D1ED22B752A6&tpl=mn&u=https%3A%2F%2Fwww.baidu.com%2F" 

          And I want to set my login in account as "<userName>"

          When I want to set my register mobile number as "<mobileNumber>"

          Then Set a register pass word as "<passWord>"

         Examples: 

             | userName       | passWord | mobileNumber|

     | Alice1234        | 1q2w3e4r |18909204520  |

     | Alice12345      | 1q2w3e4r |18909204521  |

     | Alice123456    | 1q2w3e4r |18909204522  |

          3). 在/src/test/java下新建一个BasicStepDefs.java

              package gradle.cucumber;


              import cucumber.api.java.After;

              import cucumber.api.java.Before;

              import cucumber.api.java.en.Given;

              import cucumber.api.java.en.Then;

              import cucumber.api.java.en.When;

              import org.openqa.selenium.By;

              import org.openqa.selenium.WebDriver;

              import org.openqa.selenium.JavascriptExecutor;

              import org.openqa.selenium.WebElement;

              import org.openqa.selenium.chrome.ChromeDriver;

              import org.openqa.selenium.interactions.Action; 

              import org.openqa.selenium.interactions.Actions;


          public class BasicStepDefs { 

     WebDriver driver = null;

     public void initializeDriver() {

    driver = new ChromeDriver();

    // take chrome to front window.

    String parent_window = driver.getWindowHandle();

    driver.switchTo().window(parent_window);

     }

    /*

    * Register a baiDu account feature steps

    */

    @Given("^the page is open \"([^\"]*)\"$")

    public void the_page_is_open(String page) throws Throwable {

    initializeDriver();

    driver.get(page);

    }

    @Given("^I want to set my login in account as \"([^\"]*)\"$")

    public void i_want_to_set_my_login_in_account_as(String arg1) throws Throwable {

    WebElement name = driver.findElement(By.name("userName"));

    name.sendKeys(arg1);

    }

    @When("^I want to set my register mobile number as \"([^\"]*)\"$")

    public void i_want_to_set_my_register_mobile_number_as(String mobileNumber) throws Throwable {

    WebElement mobile;

    mobile = driver.findElement(By.cssSelector("#TANGRAM__PSP_3__phone"));

    mobile.sendKeys(mobileNumber);

    }

    @Then("^Set a register pass word as \"([^\"]*)\"$")

    public void set_a_register_pass_word_as(String passWord) throws Throwable {

    WebElement pw = driver.findElement(By.id("TANGRAM__PSP_3__password"));

    pw.sendKeys(passWord);

    }

    @After

    public void cleanUp() {

    driver.close();

                 }

            }

    4). 在/src/test/java下新建一个RunCukesTest.java

          package gradle.cucumber;
          import cucumber.api.CucumberOptions;
          import cucumber.api.junit.Cucumber;
          import org.junit.runner.RunWith;

         @RunWith(Cucumber.class)
         @CucumberOptions(tags = {"@Test"})
         public class RunCukesTest {

          }


      5). 验证

         Mac终端

         -->cd /Users/mobiletest-26/eclipse-workspace/FirstGradle

          -->gradle build

          -->gradle baidu

    6). Report


    5. 总结

        1). 在验证scenario时,要修改build.gradle 里面的task下的feature路径

         2). 修改RunCukesTest中的tag

        

    展开全文
  • 简介 原创文章,转载请注明出处 这个框架的名字叫OAT,全称Object-Oriented ...自动化程序最终由许多的页面行为组成.这个框架默认使用Selenium1驱动,并且可以通过编程使用其他驱动,因 为OAT是面向接口的. ...
  • JUnit你不知道的那些事儿 转自 老刘码农翻身2016-02-24 ...Kent Beck当时力推测试驱动开发, 但是没有一个工具或者框架能让大家轻松愉快的写测试,并且自动的运行测试。 两人勾兑了一下:不如...
  • 初学javaweb,远离各自框架 OSCHINA 软件库有一个分类——Web框架,该分类中包含多种编程语言的将近500个项目。 Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践。很多Web框架...
  • JavaWeb框架

    2017-01-11 13:57:31
    JavaWeb框架 主要框架 l  前端 JQuery(Ajax) Bootstrap, EasyUI l  MVC Spring, Struts l  持久层 MyBatis, Hibernate l  JDBC数据库连接池 DBCP,C3P0, Proxool l  权限管理 Shrio, ...
  • JAVAweb之SSH框架

    千次阅读 多人点赞 2019-12-05 21:09:11
    SSH框架( struts+spring+hibernate) 简述 SSH是 struts+spring+hibernate的一个集成框架,是06年之前较为流行的一种Web应用程序开源框架.。集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层...
  • Dubbo是一个分布式服务框架,致力于提供高性能和透明的RPC(远程过程调用协议)远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的...
  • 一、框架是什么? 1、框架是用来提高开发效率的; 2、框架封装好了一些功能,我们需要使用这些功能时,调用即可,不需要再手动实现; 3、框架可以理解为一个半成品的项目,只需要懂得如何驾驭这些功能即可。 ...
  • Spring框架的功能:aop支持、ioc思想、spring jdbc、aop事务、junit测试支持 Spring搭建: 导包:beans、context、core、exception四个基础包 apache日志包 创建实体类对象 书写配置文件:建议文件名为...
  • Spring整合Junit测试 spring-test-3.2.0.RELEASE.jar (注意:Spring中没有引入c3p0和数据库驱动) 配置: 在src或者WEB-INF下新建applicationContext.xml、在src下新建并配置log4j....
  • 8 大单元测试框架 简介 测试在软件开发中是一个很重要的方面,良好的测试可以在很大程度决定一个应用的命运。 软件测试中,主要有3大种类: 单元测试单元测试主要是用于测试程序模块,确保代码运行正确。单元测试...
  • 软件自动化测试就是通过测试工具或者其他手段,按照测试人员的预定计划对软件产品进行自动化测试,他是软件测试的一个重要组成部分,能够完成许多手工测试无法完成或者难以实现的测试工作,正确合理的实施自动化测试...
  • 继续学习Spring框架,前面我们都是使用xml配置文件,这篇开始,我们学习如何使用注解方式去代替xml配置文件。注解我们多多少少接触过,例如在junit写单元测试用例这个@Test就是一个注解,在软件工程工程中一般@开头...
  • javaWeb测试

    千次阅读 2017-05-04 21:08:26
     Struts是一个用于简化MVC框架(Framework)开发的Web应用框架 B. 应用Struts 2不需要进行配置 C. Struts 2 含有丰富的标签 D. Struts2采用了WebWork的核心技术 14. Web应用的数据共享方式不...
  • javaweb框架之springmvc

    2017-09-16 16:52:18
    1、springmvc是一个轻量级的前端mvc框架,类似struts2,但是比stuts2使用方便,而且性能要高于struts2. springmvc和spring是什么关系?springmvc仅仅是spring框架下的一个web框架。可以单独使用,不依赖于spring,...
  • 使用robotframework进行...这节将使用RF框架对 2.8- 使用idea开发javaWeb应用程序-4(实现用户的增删改查) 开发的第一个网站进行接口自动化测试。 测试内容: 登录;新增用户;查询用户;修改用户;删除用户 ...
  • JavaWeb框架 - SpringBoot01

    2019-12-06 12:40:46
    SpringBoot Springboot概述: 什么是SpringBoot:...Spring框架在使用中存在的问题:在使用Spring框架在进行项目的构建的时候,令人诟病的就是非常臃肿和麻烦的配置过程,可能java程序员在进行项目环境的搭...
  • 使用robotframework进行UI自动...这节将使用RF框架对 2.8- 使用idea开发javaWeb应用程序-4(实现用户的增删改查) 开发的第一个网站进行UI自动化测试。 测试内容: 登录;新增用户;查询用户;修改用户;删除用户 ...
  • JavaWeb框架 - Spring01

    2019-10-29 09:20:24
    Spring框架的概述和入门案例 spring框架的概述:【了解即可】 spring是什么:spring是分层的JavaSE/EE应用的full-stack的轻量级开源框架,以IOC(控制反转)和AOP(面向切面编程),提供了表现层SpringMVC和持久层...
  • Javaweb 后端框架总结

    万次阅读 2018-11-22 15:26:01
     IOC(Inversion of Controller)-面向对象的一个准则,对象的控制(创建和管理)由容器或者框架来实现,而不是开发者直接调用,开发者只需要实现接口或者放入自己的类就可以 依赖注入(Dependency Injection DI)...
  • JavaWeb框架 -SpringMVC01

    2019-11-26 16:16:40
    SpringMVC框架概述和入门案例 MVC模型概述: MVC全名是Model View Controller 模型视图控制器,每个部分各司其职。 Model:数据模型,JavaBean的类,用来进行数据封装。 View:指JSP、HTML用来展示数据给用户 ...
  • java web开发之道源码最流行的 Java 模拟框架 ...完全自动化的发布很棒,您也应该为您的库这样做! 请参阅 和 。 javadoc.io 中的文档在发布 24 小时后可用。 另请阅读有关 . 较旧的 1.x 和 2.x 版
  • JavaWeb-Maven构建ssh框架

    2017-08-15 18:57:30
    -- 扫描service自动注入为bean --> 4.1.4 spring-hibernate.xml <?xml version="1.0" encoding="UTF-8"?> xmlns:xsi=...
  • JavaWeb测试题总结

    万次阅读 2016-03-28 19:02:59
     Struts是一个用于简化MVC框架(Framework)开发的Web应用框架 B. 应用Struts 2不需要进行配置 C. Struts 2 含有丰富的标签 D. Struts2采用了WebWork的核心技术 14. Web应用的数据共享方式不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,916
精华内容 1,966
关键字:

javaweb自动化测试框架

java 订阅