第八讲:使用 PyMySQL 库
培训目标
- 掌握 python 连接 MySQL 数据库的完整过程
- 掌握使用 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);
要求
- 使用 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。