看完这个你就牛了,自动化测试框架设计
Posted 测试大圣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看完这个你就牛了,自动化测试框架设计相关的知识,希望对你有一定的参考价值。
一、引言
随着IT技术的快速发展,软件开发变得越来越快速和复杂化。在这种背景下,传统的手工测试方式已经无法满足测试需求,而自动化测试随之而生。
自动化测试可以提高测试效率和测试质量,减少重复性的测试工作,从而降低测试成本。本文主要介绍自动化测试框架的设计与实现。
二、自动化测试框架概述
自动化测试框架是基于特定的编程语言和测试工具实现,用于支持自动化测试的执行和管理。它通常包括如下组成部分:
1.测试脚本库
测试脚本库是自动化测试框架中最重要的细节部分。它包含了所有的测试脚本和测试用例,以及相关的测试数据和配置信息等。测试脚本库必须保证可读性和可维护性,同时也需要保证其灵活性和扩展性。
2.测试引擎
测试引擎是自动化测试框架的核心部分,负责控制测试脚本的执行和测试结果的输出。测试引擎通常支持多种测试工具和框架,例如Selenium、Appium等。
3.测试报告
测试报告是自动化测试框架的输出结果,主要包括测试结果和性能数据等。测试报告需要清晰、简单明了地呈现测试结果,并给出相应的分析和建议。
三、自动化测试框架设计原则
在设计自动化测试框架时,需要遵循一些重要的原则,以确保其可靠性和稳定性。这些原则包括:
1.可扩展性
自动化测试框架需要具备可扩展性,以适应不同的测试需求和变化。例如,当测试工具发生改变时,自动化测试框架需要能够轻松地集成新的测试工具。
2.可维护性
自动化测试框架需要具备可维护性,以便测试人员能够快速地进行测试脚本的修改和更新。同时,测试脚本库也需要具备良好的文档和注释,方便团队成员的交流与合作。
3.灵活性
自动化测试框架需要具备灵活性,以满足不同的测试需求和测试场景。测试人员需要能够根据实际情况进行测试脚本的编写和修改,从而提高测试效率和测试质量。
四、自动化测试框架设计与实现
1.设计阶段
在自动化测试框架的设计阶段,需要明确测试需求和测试目标,并选择合适的测试工具和框架。根据需求和目标,设计测试脚本库和测试引擎,并确定测试报告的格式和内容。
2.实现阶段
在自动化测试框架的实现阶段,首先需要编写基础测试脚本,并进行初步测试和验证。然后,逐步扩展测试脚本库和测试引擎,增强其可扩展性和可维护性。最后,编写测试报告模板,并对测试结果进行分析和总结。
自动化测试框架的实现通常涉及以下技术和工具:
1.编程语言
自动化测试框架的实现通常使用编程语言,如Java、Python等。选择适合自己团队的编程语言非常重要,需要考虑开发人员的技能水平和可维护性等因素。
2.测试工具
自动化测试框架的实现还需要使用一些测试工具,如Selenium、Appium等。这些工具可以帮助测试人员实现自动化测试,提高测试效率和测试质量。
3.框架库
自动化测试框架的实现还需要使用一些框架库,如TestNG、JUnit等。这些框架库可以帮助测试人员实现测试用例的管理和执行,以及测试报告的生成和分析等功能。
五、自动化测试框架案例
下面是一个基于Python和Selenium的自动化测试框架的示例代码:
1.测试脚本库
在测试脚本库中,包含了所有的测试用例和相关的测试数据和配置信息等
class LoginPage:
def __init__(self, driver):
self.driver = driver
def login(self, username, password):
username_field = self.driver.find_element_by_id("username")
password_field = self.driver.find_element_by_id("password")
username_field.send_keys(username)
password_field.send_keys(password)
password_field.submit()
2.测试引擎
在测试引擎中,控制测试脚本的执行和测试结果的输出。
import unittest
from selenium import webdriver
from pages.login_page import LoginPage
class TestEngine(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 初始化WebDriver
cls.driver = webdriver.Chrome()
@classmethod
def tearDownClass(cls):
# 关闭WebDriver
cls.driver.quit()
def test_login_success(self):
login_page = LoginPage(self.driver)
login_page.login("username", "password")
self.assertEqual(self.driver.current_url, "http://localhost/home")
3.测试报告
在测试报告中,清晰、简单明了地呈现测试结果,并给出相应的分析和建议。
Test Result:
1 test passed, 0 tests failed.
六、总结
上述基于Python和Selenium的自动化测试框架可以帮助测试人员实现自动化测试,提高测试效率和测试质量。通过选择适合自己团队的编程语言和测试工具,并遵循可扩展性、可维护性和灵活性等原则,可以实现高效、稳定和可靠的自动化测试。同时,需要不断优化和改进自动化测试框架,以满足不同的测试需求和测试场景。
结尾福利
我也为大家整理了一套最新的软件测试系统学习教程,包括测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、Python基础、Selenium相关、性能测试、LordRunner相关等,同时也整理了一份面试文档,整份文档一共有将近 200 页,全部为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习!
Java接口自动化测试框架设计-4-POST请求方法封装过程和测试
这个接口自动化测试框架到目前为止,我们已经完成了Get请求的封装和必要的工具类的支持。接下来这篇,我来介绍如何完成POST请求的封装过程。一般来说,在一个项目中,接口测试很多时候就是测试Get和POST方法,其他的请求方式的接口很少,占的比重几乎不计。所以,这个Java接口自动化测试框架的核心就是Get和POST请求方法的封装过程。
1.POST接口举例
浏览器打开https://reqres.in/,下拉一屏。点击第一个POST请求,这个接口的介绍信息如下。
这个接口的作用是创建用户,参数是一个json类型的数据,一个name一个job,两个JSON对象。发送请求之后,返回的JSON数据有name和job和id,以及创建时间这几个数据。
2.Postman手动实现
我们先在本地postman环境,先来手动测试实现下这个post接口的请求过程。
这个post接口请求还是比较简单,很容易在postman上实现该请求。
3.Java代码自动化实现
我们已经可以正确地在postman上实现创建用户这个接口的手动测试,那么我们想要这个过程自动化实现,如何做呢。下面我在RestClient.java封装了两个方法,一个是带请求头信息的Get请求,一个是带请求头信息的POST请求方法。这篇,了解了POST请求方法,带请求头的Get方法封装就很好理解。
package com.qa.restclient;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class RestClient
//1. Get 请求方法
public CloseableHttpResponse get(String url) throws ClientProtocolException, IOException
//创建一个可关闭的HttpClient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
//创建一个HttpGet的请求对象
HttpGet httpget = new HttpGet(url);
//执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收
CloseableHttpResponse httpResponse = httpclient.execute(httpget);
return httpResponse;
//2. Get 请求方法(带请求头信息)
public CloseableHttpResponse get(String url,HashMap<String,String> headermap) throws ClientProtocolException, IOException
//创建一个可关闭的HttpClient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
//创建一个HttpGet的请求对象
HttpGet httpget = new HttpGet(url);
//加载请求头到httpget对象
for(Map.Entry<String, String> entry : headermap.entrySet())
httpget.addHeader(entry.getKey(), entry.getValue());
//执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收
CloseableHttpResponse httpResponse = httpclient.execute(httpget);
return httpResponse;
//3. POST方法
public CloseableHttpResponse post(String url, String entityString, HashMap<String,String> headermap) throws ClientProtocolException, IOException
//创建一个可关闭的HttpClient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
//创建一个HttpPost的请求对象
HttpPost httppost = new HttpPost(url);
//设置payload
httppost.setEntity(new StringEntity(entityString));
//加载请求头到httppost对象
for(Map.Entry<String, String> entry : headermap.entrySet())
httppost.addHeader(entry.getKey(), entry.getValue());
//发送post请求
CloseableHttpResponse httpResponse = httpclient.execute(httppost);
return httpResponse;
然后,我们需要写一个TestNG测试用例来测试下这个封装的post方法好不好用。由于我们去前面几篇文章介绍了TestNG测试get方法的代码,这里我们就直接拷贝和修改部分代码就行。
在写测试用例之前,我们需要提前准备好json数据,一般来说,在Java中JSON数据都是放在JAVA Bean类中,通过JSON把高级对象序列化成JSON对象。
在src/main/java中新建包:com.qa.data,然后新建一个Users.java,这个命名就参考接口的url单词就行。在postman或者网站该post方法,我们知道,需要name和job这两个json对象。我们新建一个bean类,同alt+shift+s,然后选择生成构造方法和set和get方法。
package com.qa.data;
public class Users
private String name;
private String job;
public Users()
super();
public Users(String name, String job)
super();
this.name = name;
this.job = job;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getJob()
return job;
public void setJob(String job)
this.job = job;
好了,在src/test/java下的com.qa.tests我们新建一个POST测试用例,现在我们的TestNG测试类代码如下:
package com.qa.tests;
import java.io.IOException;
import java.util.HashMap;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qa.base.TestBase;
import com.qa.data.Users;
import com.qa.restclient.RestClient;
import com.qa.util.TestUtil;
public class PostApiTest extends TestBase
TestBase testBase;
String host;
String url;
RestClient restClient;
CloseableHttpResponse closeableHttpResponse;
@BeforeClass
public void setUp()
testBase = new TestBase();
host = prop.getProperty("HOST");
url = host + "/api/users";
@Test
public void postApiTest() throws ClientProtocolException, IOException
restClient = new RestClient();
//准备请求头信息
HashMap<String,String> headermap = new HashMap<String,String>();
headermap.put("Content-Type", "application/json"); //这个在postman中可以查询到
//对象转换成Json字符串
Users user = new Users("Anthony","tester");
String userJsonString = JSON.toJSONString(user);
//System.out.println(userJsonString);
closeableHttpResponse = restClient.post(url, userJsonString, headermap);
//验证状态码是不是200
int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
Assert.assertEquals(statusCode, RESPNSE_STATUS_CODE_201,"status code is not 201");
//断言响应json内容中name和job是不是期待结果
String responseString = EntityUtils.toString(closeableHttpResponse.getEntity());
JSONObject responseJson = JSON.parseObject(responseString);
//System.out.println(responseString);
String name = TestUtil.getValueByJPath(responseJson, "name");
String job = TestUtil.getValueByJPath(responseJson, "job");
Assert.assertEquals(name, "Anthony","name is not same");
Assert.assertEquals(job, "tester","job is not same");
建议,在写测试用例过程中,需要和postman上的请求结果参考,特别是Headers这里的键值对。这里留一个作业,上面我写了一个Get带请求头的封装方法,你可以对照postman中的请求头去写一个单元测试用例去测试下这个带headers的Get方法。
目前,Java接口自动化测试框架的核心部分,http请求方法的封装已经完成。接下里还有测试日志,测试报告,或者其他需要抽取优化的模块去完成。
以上是关于看完这个你就牛了,自动化测试框架设计的主要内容,如果未能解决你的问题,请参考以下文章
华为软件测试二面:adb 连接 Android 手机的两种方式,看完你就懂了