8z Python编程语言与测试框架 - 软件测试

软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏。
本节内容:Python编程语言与测试框架 进阶

1. python 脚本编写实战1

彩云小译

环境问题

  • 建议以及经验
    在这里插入图片描述

Python环境准备

查看Python安装路径:where python

Pycharm 环境准备

项目结构

  • $sourcecode/   存放项目的所有源代码
  • README      项目说明文件
  • .gitignore     版本控制文件
  • docs/       存放一些文档
  • requirements.txt   存放软件依赖的外部Python包列表
  • bin/        存放项目的一些可执行文件,当然可以起名script/之类的也行。
  • setup.py      安装、部署、打包的脚本
  • tests/        测试代码
  • extras/        扩展,不属于项目必须的部分
  • INSTALL      安装说明文档
  • LICENSE      版权声明
  • AUTHORS     作者列表
  • MAKEFILE     编译脚本

Git 与 GitHub

  • 安装git:git-scm.com/download
    • git 是代码的管理工具,git可以回滚之前的代码
    • mac安装:brew install git
    • git --version 查看版本号
  • 注册github:https://github.com
  • Pycharm git 插件

git在Pycharm中的使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Git SSH 配置 <与下面重复>

  • 参考:https://ceshiren.com/t/topic/7405
  • git config --global user.name “github用户名”
  • git config --global user.email “github邮箱地址”
  • ssh-keygen -t rsa -C “github邮箱地址”
  • .ssh/id_rsa.pub 复制内容到github里面
  • 验证:ssh -T git@github.com

github 创建代码仓库

echo “# FIS03” >> README.md
git init
git add README.md
git commit -m “first commit”
git branch -M main
git remote add origin https://github.com/Chan0619/FIS03
git push -u origin main

在这里插入图片描述
在这里插入图片描述

pycharm与github交互–上传项目到github步骤

pycharm需要安装插件 markdown、git、github

首先配置 Pycharm 里github的账号与密码

  • 先安装插件github:File – Settings – Plugins
  • File – Settings – Version Control – GitHub – 输入账号密码
  • 不能使用账号密码时,可以使用Use Token登录
    • 在github点击右上角 Settings – Developer settings – Personal access tokens – Generate new token – 勾选所有选项
  1. git init:将当前目录变成git版本控制的目录–生成 .git 文件
    • 右击要上传的文件–点击Open in Terminal,输入git init
  2. ls -al:windows命令 dir/a -显示所有
    • dir/a:h 仅显示隐藏的 .git文件
  3. 点击右上方的绿色对勾(提交代码到本地仓库)
    • 对勾意思是将版本添加到git的版本管理库中 -若没有重新启动pycharm
    • 相当于git addgit commit --将代码添加到本地仓库
    • 在进入后的界面中将不需要的文件添加到版本控制文件
      • 右键 – Add to .gitignore – Add to .gitignore
    • 勾选右边的 Reformat code
  4. 点击下方commit,将代码上传到本地仓库
    如何将本地代码和 github 代码进行关联?
  5. 在github网站创建仓库
  6. 将本地代码与远程代码进行关联
    • 点击 VCS – Git – Remotes – 添加想要关联的远程仓库的地址 https://github.com/Chan0619/test.git
    • 相当于 git remote
  7. 将本地代码push到远程仓库
    • VCS – Git – Push – 点击 push 提交
    • 相当于 git push

在这里插入图片描述


右侧展示需要上传的代码
在这里插入图片描述


  • github密码配置方法
    • ~/.ssh下面有id_rsa -私钥,id_rsa.pub -公钥,将公钥放在github上
    • cat ~/.ssh/id_rsa.pub 复制内容
    • 在github网站点击Settings – SSH and GPG keys --New SSH key – 粘贴公钥

pycharm 安装git扩展插件

  • git 提交代码到github需要两种免密方式
    1. 在Pycharm里面配置好 github的用户名和密码
    2. ssh key,将本地公钥配置到github上

Git SSH 配置

  • 参考:https://ceshiren.com/t/topic/7405
  • git config --global user.name “github用户名”
  • git config --global user.email “github邮箱地址”
  • ssh-keygen -t rsa -C “github邮箱地址”
  • .ssh/id_rsa.pub 复制内容到github里面
  • 验证:ssh -T git@github.com
    在这里插入图片描述

我们强烈建议所有的git仓库都有一个README, LICENSE,.gitignore文件

简易的命令行入门教程:

Git 全局设置:

git config --global user.name "Chan"
git config --global user.email "phoebe.yanxi@gmail.com"

创建 git 仓库:

mkdir FIS03
cd FIS03
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/chan0619/FIS03.git
git push -u origin master

已有仓库?

cd existing_git_repo
git remote add origin https://gitee.com/chan0619/FIS03.git
git push -u origin master

Python基础语法实战

变量和函数

1、python 允许在模块里定义 变量和方法的
2、函数里是可以调用外部的变量
3、函数里不允许改变外部变量
4、把外部变量设置为global 全局的,就可以改变它
5、通过 id() 方法可以打印对象的内存地址
6、方法默认返回值 是None


__name__是Python的内置变量,用于指代当前模块。
__name__:在执行当前模块时__name__等于__main__,在其他的模块中调用时__name__的值为模块名

#导入模块时会先解释执行模块里面的方法。
#放在if __name__ == '__main__':时就不会执行
https://www.cnblogs.com/chenhuabin/p/10118199.html

if __name__ == '__main__':  # 相当于模块的入口
# __name__是Python的内置的属性变量,name是一个变量,不是一个字符串。
# __main__是一个字符串
print(locals())  # locals() 查看本地有哪些全局变量
# 双下滑线开头的变量为私有变量

from import 与import 的区别:

  • import 引用了变量的地址 --浅拷贝
  • from import 相当于复制了一份变量到本地 --深拷贝

一般使用from import 比较多,
如果要改变里面的值则使用import


将当前的包 目录 设置为根目录,使其从当前目录开始导包:
右击当前目录名 – Mark Directory as – Sources Root


实战

  • 发礼物练习
    在这里插入图片描述

pycharm 常用的快捷键

  • 格式化 alt + ctrl + L
  • 导入 alt + 回车
  • 复制当前行 ctrl +d
  • 查看源代码 ctrl + 鼠标左键
  • 注释,多行注释 ctrl + /
  • 查找,替换 ctrl+f ,ctrl+r

课后作业

原有存款 1000元, 发工资之后存款变为2000元
定义模块
1、money.py saved_money = 1000
2、定义发工资模块 send_money,用来增加收入计算
3、定义工资查询模块 select_money,用来展示工资数额
4、定义一个start.py ,启动文件展示最终存款金额


# 浅拷贝
num2 = nums.copy()
# words1 是words的浅拷贝
words = ['hello', 'hogwarts', ['hurry', 'tom']]
words1 = words.copy()

words[0] = '哈啰'
print(words1)
print(words)

words[2][0] = '赫敏'
print(words)
print(words1)

# 浅拷贝,就是只拷贝第一层
# 深拷贝,完全拷贝出一个新的内容
words2 = copy.deepcopy(words)
words[0] = '哈啰'
words[2][0] = '赫敏'
print(words2)
print(words)

2. python 脚本编写实战2

理解面向对象

面向对象编程

  • 一切皆对象 =属性+行为
  • 类和实例的概念
  • 类与继承
  • Self 介绍

dir() 方法可以查看对象的属性和方法
l= [1,2,3] dir(l)

面向对象实例

  • 房子
    在这里插入图片描述

面向对象实战

  • 创建一个Person 类
    • 属性:姓名,性别,年龄,存款金额
    • 方法:吃,睡,跑,赚钱
  • 创建 FunnyMan类(喜剧演员)
    • 继承父类Person的所有属性和方法
    • 新增一个方法,fun()搞笑

类名:驼峰命名法 --每个单词首字母大写
文件名:小写
方法名:小写

类里面定义的方法都要加self
self接受实例对象而不是类对象
不可以通过类直接调用方法
可以将方法变为类方法进行调用 @classmethod

类名().方法名 --通过实例化对象调用方法
类名.方法名 --通过类名调用方法

当实例化一个实例之后,就不受控制了

面向对象概念

  • 类是虚拟的、抽象的概念,没有具体的实体
  • 实例是具体到某个事物
  • __init()__方法给实例的属性赋值

私有属性 与 私有方法 调用

  • 私有的属性,不能通过对象直接访问,可以通过方法访问
  • 私有的方法,不能通过对象直接访问
  • 私有的属性、方法,不会被子类继承,也不能被访问
  • 可以通过调用继承的父类的公有方法,间接的访问父类的私有方法、属性
  • dir(实例) 查看可被调用的属性和方法

私有方法可以用_Person__money()访问
dir() 查看属性、方法

类的继承

  • 被继承者:父类,又叫基类,超类
  • 继承者:子类
    • 可以继承父类的属性和方法
    • 父类的私有属性、方法,不会被子类继承,也不能被访问
    • 如果子类拥有父类一样的名字的方法,父类的方法将被覆盖(与参数无关)

继承 - 实战

  • 父类:
    • 人类
  • 子类:
    • 喜剧演员
      • 人类所有的属性和方法
      • 新增技能:搞笑
    • 歌手:
      • 人类所有的属性和方法
      • 增强技能:赚钱
# 继承  name, age, gender, money为父类的属性
def __init__(self, skill, name, age, gender, money):
    self.skill = skill
    super().__init__(name, age, gender, money)

self 的意思

1、self 只在类中定义的方法才有,类外面的函数是不需要有self参数的
2、self的名字不是必须的, 也不是关键字
3、self 表示实例本身, 不是类
4、self的方法,需要实例去调用

self 表示实例本身,想要调用方法,需要传递实例,self表示类的实例

面向对象实战

实战1 - 面向对象之开电动车https://gitee.com/chan0619/HogwartsFIS03/blob/master/python_pratice/objectdemo/bicycle.py

  • 写一个Bicycle(自行车)类,有run(骑行)方法,调用时显示骑行里程km(骑行里程为传入的数字)
  • 再写一个电动自行成类EBicycle继承Bicycle,添加电池电量battery_level属性通过参数传入,同时有两个方法:
    1. fill_charge(vol)用来充电,vol为电量
    2. run(km)方法用于骑行,每骑行10km消耗电量1度,当电量耗尽时调用Bicycle的run方法骑行,
  • 通过传入的骑行里程数,显示骑行结果(就是当电量耗尽,需要你真正骑的里程数)。
# 调用父类的方法
super().run(miles)  # 用脚蹬的里程数,调用了父类的run方法

实战2 - 回合制格斗游戏

  • 一个回合制游戏,每个角色都有hp和power,hp代表血量,power代表攻击力,hp的初始值为1000,power的初始值为200。
  • 定义一个fight方法:
  • my_hp = hp - enemy_power
  • enemy_final_hp = enemy_hp - my_power
  • 两个hp进行对比,血量剩余多的人获胜
# 三目表达式  --适用于简单的if else 表达式
print('我赢了') if my_final_hp > enemy_final_hp else print('我输了')

面向对象之回合制游戏

  1. 使用面向对象的实现一个回合制格斗游戏
  2. 使用面向对象的继承改造游戏

代码优化 --继承

  • 后裔,后裔继承了Game的hp和power。并多了护甲属性。
  • 重新定义另一个defense属性:
  • final_hp = hp + defense - enemy_power
  • enemy_final_hp = enemy_hp - power
  • 两个hp进行对比,血量先为零的人输掉比赛

Yaml 用法

数据存储格式
excel, csv, json, xml, yaml…

yaml文件以 .yml 或 .yaml 结尾

https://www.runoob.com/w3cnote/yaml-intro.html
引用
& 锚点和 * 别名,可以用来引用:
& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

数据类型

  • YAML 支持以下几种数据类型:
    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量(scalars):单个的、不可再分的值

YAML --可以添加注释

  • 安装 PyYAML
  • 官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation
  • 简介:
    • yaml:Yet Another Markup Language:另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大,有点类似于json格式。
      在这里插入图片描述

yaml.dump

  • yaml.dump函数接受一个Python对象并生成一个YAML文档

yaml.load

  • 函数yaml.load将YAML文档转换为Python对象
  • 更推荐使用yaml.safe_load,更加安全

  • 关键API
    yaml.safe_load() 将yaml格式或者文件流转成 python 对象
    yaml.safe_dump() 将python 对象转成yaml格式

yaml语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

yaml支持的数据结构

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)
  • 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期

键值对/字典

  • yaml里面的键值对,也就是python里面的字典(dict)数据类型
    • 使用冒号,冒号后面有空格。格式为:key:value
    • 使用缩进表示层级关系
    • 支持流式语法表示对象

混合使用

  1. list嵌套dict
  2. dict嵌套list

Yaml 实战

Yaml实战案例

  1. 电动车案例
  2. 使用yaml配置电动车信息
  3. 配置两台电动车的信息,设置默认运行的电动车

课后作业

1、自己写一个面向对象的例子:
比如创建一个类(Animal)【动物类】,类里有属性(名称,颜色,年龄,性别),类方法(会叫,会跑)
创建子类【猫】,继承【动物类】,
复写父类的__init__方法,继承父类的属性,
添加一个新的属性,毛发=短毛,
添加一个新的方法, 会捉老鼠,
复写父类的‘【会叫】的方法,改成【喵喵叫】

创建子类【狗】,继承【动物类】,
复写父类的__init__方法,继承父类的属性,
添加一个新的属性,毛发=长毛,
添加一个新的方法, 会看家,
复写父类的【会叫】的方法,改成【汪汪叫】

调用__name__==’__main__’:
创建一个猫猫实例
调用捉老鼠的方法
打印【猫猫的姓名,颜色,年龄,性别,毛发,捉到了老鼠】。

创建一个狗狗实例
调用【会看家】的方法
打印【狗狗的姓名,颜色,年龄,性别,毛发】。

2、将数据配置到yaml文件里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值