第八讲:使用 PyMySQL 库

培训目标

  1. 掌握 python 连接 MySQL 数据库的完整过程
  2. 掌握使用 python 建立连接后,发送 SQL、结果获取、结果解析,连接释放的全过程

课程笔记

Precondition:

  • 需结合前两节课的内容,使用 behave 框架以及 logging 模块。
  • 需要预习 Python 的 PyMySQL 库。
  • 预备数据库环境,数据库及用户自行创建

参考 PyMySQL 官方文档:https://pymysql.readthedocs.io/en/latest/index.html

ps: PyMySQL 拿回的数据默认为元组类型,若有需要,可设置为字典类型。

附件:用例中将要用到的表及数据

表:
create table `student` (
`id` int unsigned auto_increment primary key,
`name` varchar(20) unique not null,
`gender` enum('男', '女') not null,
`location` varchar(10) not null,
`birthday` date default '1995-01-01',
`chinese` float(4, 1) not null default 0,
`math` float(4, 1) not null default 0,
`english` float(4, 1) not null default 0,
`only_child` boolean
) charset='utf8mb4';
  
数据:
insert into student
    (`name`, `gender`, `location`, `birthday`, `chinese`, `math`, `english`, `only_child`)
values
('萧峰', '男', '北京', '2000-10-1', 93, 91, 94, true),
('阿朱', '女', '苏州', '1997-07-05', 67, 56, 69, false),
('虚竹', '男', '广州', '1996-9-9', 94, 86, 82, true),
('郭靖', '男', '深圳', '1995-4-4', 97.5, 94, 95, false),
('小昭', '女', '北京', '1996-08-10', 67, 56, 58, false),
('杨康', '男', '成都', '1998-10-5', 41, 75, 66, false),
('张无忌', '男', '西安', '1994-8-30', 62, 98, 55, true),
('多隆', '男', '上海', '1997-11-28', 67, 56, 24, false),
('王语嫣', '女', '青岛', '1997-07-25', 67, 56, 80, false),
('黄蓉', '女', '北京', '1999-10-01', 67, 56, 77, false),
('令狐冲', '男', '杭州', '1997-5-2', 85.0, 100.0, 70, false),
('郭襄', '女', '厦门', '1998-02-22', 67, 56, 70, false),
('小龙女', '女', '西安', '1995-09-20', 67, 56, 69, false),
('韦小宝', '男', '上海', '1995-6-1', 60, 46, 58, false),
('周芷若', '女', '重庆', '1997-10-12', 67, 56, 74, false),
('杨过', '男', '北京', '1996-7-9', 82, 59.5, 70, false),
('赵敏', '女', '上海', '1997-10-16', 67, 56, 73, false),
('双儿', '女', '南京', '1994-09-08', 67, 56, 50, false),
('沐剑屏', '女', '北京', '1998-09-19', 67, 56, 22, false),
('段誉', '男', '上海', '1995-3-2', 59.5, 59.5, 58, false);

要求

  1. 使用 yaml 文件配置日志,通过日志体现 behave 的执行流水,流水至少包含:进出 feature、进出 scenario、进出 step。
    2.创建 2 个 feature 文件,其中一个 feature 文件含 2 个 Scenairo,另一个 feature 文件含 1 个 Scenario(名字自拟)。

features 结构为:

           feature A:scenario1 (tag)   / scenario2(tag)

           feature B:scenario3 (tag)

3.Feature A 中的 scenario 1 与 Feature B 中的 scenario 3 运行前均需创建好前置附件中的表且插入数据,通用前置需要抽取在合适的位置,使得 2 个 Scenario 相同逻辑部分能复用一份。

并且保证两个 scenario 的独立性,每个 scenario 初始操作该表时,该表中的数据均为附件中提供的初始数据(可借助 tag 在 scenario 执行后清理数据)。

准备步骤完成后,每个人完成不同的任务:    

scenario1:

@张军磊:找出居住在北京的学生,,并断言其中有姓杨的同学存在。
@陈加元:找出数学考90分以上的学生,并断言其中有郭靖、张无忌。
@金长龙:修改张无忌的居住地为上海,并查询判断修改成功。
@张丽梅:找出多隆的信息,并断言其不是独生子女。
@韩青举:找出阿朱的信息,断言阿朱的生日是在周六。
@王翔飞:找出郭靖的信息,并断言郭靖居住在青岛。

scenario3:

@张军磊:找出年纪最小的学生,并断言是萧峰。
@陈加元:找出居住在上海的学生,并断言全部不是独生子女。
@金长龙:筛选出在北京上海居住的学生, 并断言其个数接近总学生数的一半。
@张丽梅:查找平均成绩在60以上的人,并判断张无忌在其中。
@韩青举:找出平均成绩最差的学生,断言其不是韦小宝
@王翔飞:找出萧峰和郭靖的数学成绩,并断言郭靖的数学成绩高过萧峰。

 4.scenario 2 的内容为自行设计创建另一张表并插入些数据。

 5. 通过 tag 实现仅运行 Feature A 中的 scenario 1 和 Feature B 中的 scenario 3,不能运行 Feature A 中的 scenario 2。