总结目前项目接口测试用到的技术

文章介绍了在接口测试中使用到的技术,主要包括JDBC的DBCAPI组件如DriverManager、Connection、Statement等,以及JDBC操作数据库的步骤。同时,文章探讨了JOOQ这一Java访问数据库的工具包,强调其轻量级、灵活的特点,并展示了如何使用DSLContext进行SQL查询。最后提到了装饰者模式在接口测试SQL使用中的应用。
摘要由CSDN通过智能技术生成

总结目前项目接口测试用到的技术

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
第一章 访问数据库-JDBC


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

目前接口测试,主要用的是包装好的框架进行, 现在对底层使用到的技术或框架进行学习、总结。
1、首先,目前团队用到的操作数据库框架是:把不同的数据分为不同的container,如Dbcontainer、TDDLcontainer,甚至excel、csv都可以作为container
2、使用builder模式,在DbContaier类的内类部Builder里,定义了链接数据库所需要的jdbcUrl、username、password、driverName;定义了connect方法,进行连接数据库(用到的技术是jdbc)

3、使用:直接new 一个DbContaier,并传入参数,调用builde方法

一、访问数据库-JDBC

1、DBC API 主要功能:三件事,具体通过以下类/接口实现:

DriverManager: 管理JDBC驱动

Connection: 连接

Statement(PreparedStatement): 增删改查

CallableStatement : 调用数据库中的存储过程/存储函数

Result : 返回的结果集

2、JDBC访问数据库的具体步骤:

a.导入驱动,加载具体的驱动类

b.与数据库建立连接

 Class.forName("com.mysql.jdbc.Driver");
java.sql.Connection connection = DriverManager.getConnection(this.jdbcUrl, this.username, this.password);
// Connection产生操作数据库的对象:
Statement statement = connection.createStatement();  
// 预编译,更推荐 
Statement statement = connection.PrepareStatement()

c.发送sql,执行

String sql = "insert into student values('zl',10,'1')";
// Statement操作数据库
int count = statement.executeUpdate(sql);
if(count>0) {
    System.out.println("操作成功!");
}
statement.close();
connection.close();}

Statement(PreparedStatement):增删改查(通过Connection产生)
CallableStatement: 调用数据库中的 存储过程/存储函数 (通过Connection产生)

Result: 返回的结果集(上面的Statement等产生)

操作:

增删改: executeUpdate()

查询:executeQuery()

ResultSet():保存结果集 select * from xxx

next() : 光标下移,判断是否有下一条数据:true/false

previous() : true/false

getXxx(字段名/位置):获取具体的字段值

d.处理结果集

3.JDBC总结(模板、八股文)


```java
try{

// a.导入驱动包、加载具体驱动类Class.forName("具体驱动类");

// b.与数据库建立连接connection = DriverManager.getConnection(...);

// c.通过connection获取操作数据库的对象(Statement\preparedStatement\callablestatement)

// stmt = connection.createStatement();

// d.查询需要处理结果集 rs = pstmt.executeQuery()

while(rs.next()){

//判断是否有下一个元素

rs.getXxx(...); //获取这个元素

}

}catch(ClassNotFoundException e)

{

...

}

catch(SQLException e)

{

...

}

catch(Exception e)

{

...

}

finally

{

//打开顺序,与关闭顺序相反

if(rs!=null) {rs.close();}

if(stmt!=null) {stmt.close();}

if(connection!=null) {connection.close();}

}

二、SQL查询

1、 基本原理

目前根据jqqo拼接出来的sql语句可复用,具体如下

XxxSql XxxSql =XxxSql.instance().select().where(XxxSql.ID,EnumOperator.EQ, parentId)
                .end()
                .orderBy(EnumSqlOrder.DESC, XxxSql.GMT_CREATE)
                .end();
        System.out.println(XxxSql.getSqlStr());
        IEntity<?, ?>[] iEntities = XxxFactory.FACTORY_XXX.create(XxxSql);

2 、JOOQ

1.基于java访问关系型数据库的工具包
	轻量,简单,足够灵活,可以轻松使用java面向对象语法来实现各种复杂的sql,并且可以通过实体映射来访问数据库。参考文档:https://blog.csdn.net/dnc8371/article/details/106703338
	jOOQ是一种DSL(领域特定语言),它模仿Java API中的标准和特定于供应商的SQL语法。 该API背后的思想很容易理解:

作为内部 DSL,Java编译器可以验证您的SQL查询的语法正确性(例如,SQL关键字的正确顺序)
将表和列作为生成的Java对象,编译器还可以验证元数据的正确性(例如,正确的列名和类型)
换句话说,当您要表达这样的SQL查询时:

SELECT   author.first_name, author.last_name
FROM     author
ORDER BY author.id

…然后您可以立即使用jOOQ编写相同的查询

select  (AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME)
.from   (AUTHOR)
.orderBy(AUTHOR.ID);
2、Table、Field、Select、Condition、Record、Result、DSLContext

Table jooq对表的抽象
Field jooq对字段的抽象
Select 这里准确来说应该是Select族.Select有很多相似的类型,SelectConditionStep,SelectSelectStep等等,
是对查询一个封装。
Condition jooq对查询条件的抽象,说白了就是where后面条件的一个集合
Record jooq对数据库数据的抽象,可以理解为数据库中的一条或者多条数据
Result 对查询结果集的封装,可以这样用:Record r = select xx,也可以这样玩:Result,目前基本上是用Result这种用法来存查询的结果集。

DSLContext jooq的上下文,通过它,基本上可以做任何你想做的事,其它的元素,都可以通过这得到,所以,搞懂了DSLContext,什么jooq都不是问题了。

3、JDBC结合Jooq使用举例
public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
	// 连接数据库
        String userName = "root";
        String password = "root";
        String url = "jdbc:mysql://localhost:3306/test";
        Class.forName("com.mysql.jdbc.Driver");
        try (Connection conn = DriverManager.getConnection(url,userName,password)) {
        // jooq
            **DSLContext dsl= DSL.using(conn, SQLDialect.MYSQL);**
			**Result<Record> result = dsl.select()
   				.from(USERSINFO)
   				.where(USERSINFO.ID.eq(3))
  				 .fetch()**
   
            for ( Record r : result ) {
                Integer id = r.getValue(USERSINFO.USERSID);
                String name = r.getValue(USERSINFO.USERSNAME);
                String pwd = r.getValue(USERSINFO.USERSPWD);

                System.out.println("ID: " + id + " NAME : " + name + " PWD : " + pwd);
            }
        } catch ( Exception e ) {
            e.printStackTrace();
        }

    }
}

2.基于上面的container,只需用到JOOQ的sql builder功能实现sql即可,访问数据库以及更多的其他功能暂未深入调研。

3.2 装饰者模式

对于当前接口测试的sql使用,多复杂的sql也只是一条sql得到一类实体,多个条件以及多表连接,也就相当于给一个sql增加职责增加功能,装饰者模式在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象,对于功能扩展更有弹性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值