一、前言
这篇文章呢我们接着来讲python自动化的基础,本篇文章主要讲解Python中的几种流程控制语句用法、使用场景、注意事项等,是流程控制语句的专题讲解,废话这里就不多说了咱们直接进入主题吧。
二、流程控制语句
2.1 if else流程控制语句的作用
if else流程控制语句就是程序符合某种特定的条件下会执行对应的分支语句,从而执行对应的操作,无论是否在自动化测试的领域当中,流程控制语句都是非常重要的知识内容,大致的流程图参考如下:
流程控制其实就是对代码语句进行判断,返回True或False,只要能够返回True或False的表达式均可以作为if的判断,例如比较运算、逻辑运算、成员运算的表达式均可作为判断条件,Python语言指定任何非0和非空值为True,0 或者 null为False,使用if else的基础语法如下:
“””if 条件表达式: 执行语句else: 执行语句”””
当条件表达式的判断成立时,则执行对应语句,执行的内容可以有多行,if else是带有冒号:的,在Python中遇到冒号:需要进行缩进以表示这是一个分支,且冒号是英文冒号, 而else表示可选语句,当if的判断分支不满足执行条件时则会进入else的判断流程,执行else的分支语句,如果if else分支条件成立时则会执行对应的分支语句,从而不会进入其他分支语句并执行:
2.2 if else条件语句讲解
2.2.1 简单的if语句
一个简单的if语句是这样的,只存在一个条件表达式,一个分支语句,当条件表达式成立时则执行了对应的语句。
在Python中可以单独存在一个if而没有else,这种情况在Python语法中是允许的:
“””if 条件表达式: 执行语句 “””if 3 > 2: print(“3是大于2的”)
# 下面这两段代码是等价的,在Python中如果只执行一个if且没有else的情况下,可以理解成在else的分支语句中执行了一个pass,以此来忽略# 第一段代码if 3 > 2: print(“3是大于2的”)# 第二段代码if 3 > 2: print(“3是大于2的”)else: pass
2.2.2 if / else语句
了解了单个if后,来了解下一个基本的if else语句,当条件表达式不成立时,执行了else分支下的代码语句:
“””if 表达式: 执行语句else: 执行语句”””if len(“我爱中国”) > 10: print(“数据长度大于10”)else: print(“数据长度小于10”)
2.2.3 if / elif / elif / else语句
带有if / elif / elif / else的语句就是完整的if else语句,在自动化测试中也比较常用,当有多个分支存在时,最终只会执行其中一个分支语句,其他语句不会进行执行, 也让我们一起看下示例:
# elif可以有多个,但else只能有一个,elif在else的上方,在只剩余一个分支时使用else,其他情况下均使用elif”””if 表达式: 执行语句elif: 执行语句elif: 执行语句else: 执行语句”””# 举例以更好的帮助进行完整if else语句的理解,代码仍有可提升改进以及问题修复的地方,请忽略grade = int(input(“请输入您的期末考试分数:”))if grade < 40: print(f"您的成绩为{grade},分数评定为E级")elif 40 <= grade < 60: print(f"您的成绩为{grade},分数评定为C级")elif 60 <= grade < 80: print(f"您的成绩为{grade},分数评定为B级")elif 80 <= grade <= 95: print(f"您的成绩为{grade},分数评定为A级")else: print(f"您的成绩为{grade},分数评定为S级")
2.2.4 if / if / if 语句
这里需要特别注意的是,每个if语句都是独立的分支,独立的if语句间不会相互影响,我们参照上面的例子,再次来看下独立if的情况,由结果所示,当成绩输入为50时,输出了两个语句,因为50的这个分数在代码中既符合C级的分支又符合else的S分支,故此输出了两个,也能够验证出if是独立分支互不影响的结论:
“””if 表达式: 执行语句if 表达式: 执行语句if 表达式: 执行语句”””# 举例以更好的帮助进行if语句的理解,代码仍有可提升改进以及问题修复的地方,请忽略grade = int(input(“请输入您的期末考试分数:”))if grade < 40: print(f"您的成绩为{grade},分数评定为E级")if 40 <= grade < 60: print(f"您的成绩为{grade},分数评定为C级")if 60 <= grade < 80: print(f"您的成绩为{grade},分数评定为B级")if 80 <= grade <= 95: print(f"您的成绩为{grade},分数评定为A级")else: print(f"您的成绩为{grade},分数评定为S级")
2.2.5 if嵌套语句
我们还是用上面的例子,if嵌套顾名思义就是if中有一个if或多个if,我们把if中有一个或多个if的情况称为if嵌套,虽然Python支持多层if的嵌套,但推荐大家尽可能的不使用,太多的嵌套if不便于理解,也会间接性提高维护成本,两层if通常能够解决大多数的问题,在真实的项目中需要牢记,if嵌套它的基本格式和语法是这样的:
“””if 表达式: 执行语句 if 表达式: 执行语句 if 表达式: 执行语句 ….”””# 举例以更好的帮助进行if嵌套的理解,代码仍有可提升改进以及问题修复的地方,请忽略grade = int(input(“请输入期末考试分数:”))face = int(input(“请输入颜值分数:”))if grade < 60: print(f"你的成绩为{grade},评定为不及格!这么简单的题目竟然考成这样!!!") if face > 80: print(f”你的颜值分数为{face},虽然你成绩不太行,但看你还有一番姿色,我就勉为其难的帮你修改下成绩吧!”) grade = grade + 40 print(f”已经帮你修改成绩了,你当前的最新成绩是{grade},要继续努力喽!”)
2.2.6 if not语句
if not的使用场景在自动化测试中也比较常见,但使用的人较少,if not也比较好理解,参考下面的例子:
girlfriend = True# 一开始变量的值为True,那么not True就相当于是False了,那么当条件不成立时则进入了else分支并执行if not girlfriend: print(“没得女朋友”)else: print(“有女朋友”)
2.2.7 空数据下的if else语句
在Python中”空”意味着False,由此我们可得,空字符串、空列表、空元组、空字典、数字0等,这些都是False,如果if中的条件表达式是空数据,那么表达式的条件是不成立的:
a = “”b = []c = ()d = {}e = 0f = Noneg = Falseif a: print(“a成立”)else: print(“a不成立”)if b: print(“b成立”)else: print(“b不成立”)if c: print(“c成立”)else: print(“c不成立”)if d: print(“d成立”)else: print(“d不成立”)if e: print(“e成立”)else: print(“e不成立”)if f: print(“f成立”)else: print(“f不成立”)if g: print(“g成立”)else: print(“g不成立”)
我们之前提到了只有None才是真正意义上的空,但在判断时空数据也是False,但是空字符串加空格的场景是True,虽然看起来没有,但空格是作为一个字符存在的:
a = ” “if a: print(“a成立”)else: print(“a不成立”)
2.3 while循环流程控制语句的作用
while语句我们又称之为循环语句,什么是循环?通俗易懂的说就是一遍又一遍的执行代码,当条件持续为True时,进入无限循环也就是我们常说的死循环,只有当条件为False(条件不满足)时才能够跳出循环,结束循环语句,大致的流程图参考如下:
2.4 while循环语句讲解
2.4.1 简单的while语句
一个简单的while语句是这样的,表达式为True,无限执行循环体:
“””while 表达式: 循环体语句”””while True: print(“I love DDDD!”)
2.4.2 while的使用场景
无限执行循环体的内容,达到死循环的目的,在日常的生活、工作中会有这样的场景吗?其实不仅有,而且还很多:
场景一: 最常见的场景就是当你进行某网站的注册时,用户名或密码输入不符合规则,这时需要你重新输入,那么这里就使用到了while循环,当你输入错误后又返回到一开始的while循环并再一次执行循环体以达到让你重新输入的目的。
场景二: 在现代化数字货币交易的时代,难免还需要在特定场景中使用现金,想一想ATM机的取钱是否只是单纯的取一次就不可使用了?显然不是的,可以由不同的人或相同的人进行无数次的取款、存款行为,那么这里就是一个无限循环,而取钱、存钱的操作就是一个循环体,当循环体结束完成后,又返回到最初的循环,当下一个人进来时选择存款,那么代码就又会走向if存款的分支,从而继续执行if存款分支循环体的内容。
场景三: 当你开启你最爱的英雄联盟时,英雄联盟作为一个独立的程序在运行,它同样也是在使用while循环来控制这个客户端的持续运行,当你关闭客户端后,条件由True变更为Fasle,从而关闭客户端,退出循环体,当条件为True时,客户端才持续运行,展示窗口界面。
场景四: 当我们进行自动化测试时需要执行测试用例,也许有数千条,数万条的测试用例,那我们也可以使用while循环的方式,1,2,10,100…逐条执行,直至测试用例全部执行完毕。
2.4.3 进阶版的while语句
第一个简单的循环是死循环,刚刚也提到了场景四,我们在执行自动化测试用例的时候,也可以使用到while,简单的使用下面的例子来看下效果:
case = 10000count = 0while count < case: print(f"正在执行第{count}个用例") count += 1 if count == 10000: print("测试用例执行完毕,测试结果为:XXX")
2.4.4 break的用法
break的意思是强制退出,用在while中,先让我们来看看例子:
case = 10000count = 0while True: if count < case: print(f"正在执行第{count}个用例") count += 1 print("测试用例执行完毕")
如上图所示,在这里会发现,只打印到了9999次的用例,但1W的测试用例并没有打印输出,实际上程序仍然在运行,仍然在+1,但因为条件不符合,故此没有打印1W,这时候我们可以通过break来解决这个问题,在符合条件时运行终止:
case = 10000count = 0while True: if count <= case: print(f"正在执行第{count}个用例") count += 1 else: breakprint("测试用例执行完毕")
2.4.5 continue的用法
continue的作用是跳过这一次,进入下一次的判断,还是参照上面的例子,我们来看下continue的用法。
如下图所示,当continue在计数器count之上的时,计数器就失效了,因为当进行print打印完成后遇到了continue,这个时候会跳过本次的循环,从头开始,也就是说永远都无法计数并且执行完毕了。
case = 10000count = 0while True: if count <= case: print(f"正在执行第{count}个用例") continue count += 1print("测试用例执行完毕")
2.5 for循环流程控制语句的作用
for循环其实就是循环获取可迭代的对象,有多个元素的例如、字符串、列表、元组、字典等,可以依次获取,for循环其实就是遍历,通俗易懂的说就是一个一个去获取,直至全部获取完成,简易的流程图如下所示:
2.6 for循环语句讲解
2.6.1 简单的for循环语句
for循环其实就是循环获取可迭代的对象,有多个元素的例如、字符串、列表、元组、字典等,可以依次获取,for循环就是遍历,通俗易懂的说就是一个一个去获取,直至全部获取完成,简单的示例如下:
“””for 接收变量 in 遍历变量 / 条件: 代码块”””real_talk = “我爱中国”for new_real_talk in real_talk: # 依次获取real_talk当中的每一个元素,保存在new_real_talk的变量当中 # new_real_talk只是一个变量,可以随意更换命名而后进行打印即可 print(new_real_talk)
2.6.2 for循环与if嵌套语句
Python中有if嵌套语句,也同样可以for循环中嵌套if语句进行判断,可以查看简单示例:
“””for 接收变量 in 遍历变量 / 条件: if 条件表达式: 代码块”””real_talk = “我爱中国”for new_real_talk in real_talk: # 依次获取real_talk当中的每一个元素,保存在new_real_talk的变量当中 print(new_real_talk) if real_talk != “我爱中国”: pass else: print(f”每一次打印完,我都要重复一遍:{real_talk}”)
2.6.3 for循环数据类型的应用
for循环难免会遍历各种数据类型的内容,如下图所示,列表与元组的遍历方式一致,唯独字典有一定的区别,如果你按照同样的方式来遍历字典,那么你获取的则是字典的key而不是对应的value,我们通常是想获取字典的value,故此我们需要在遍历的变量后加上value方法来获取value值,让我们一起看下示例:
# 列表数据的遍历应用my_list0 = [“测试用例1”, “测试用例2”, “测试用例3″]for new_my_list0 in my_list0: print(f”正在执行:{new_my_list0}”)print() # 用来换行,方便区分# 元组数据的遍历应用my_list1 = (“测试用例1”, “测试用例2”, “测试用例3″)for new_my_list1 in my_list1: print(f”正在执行:{new_my_list1}”)print()# 字典数据key的遍历应用my_list2 = {“NO.1”: “测试用例1”, “NO.2”: “测试用例2”, “NO.3”: “测试用例3″}for new_my_list2 in my_list2: print(f”遍历字典的key,正在执行:{new_my_list2}”)print()# 字典数据vlaue的遍历应用my_list3 = {“NO.1”: “测试用例1”, “NO.2”: “测试用例2”, “NO.3”: “测试用例3″}for new_my_list3 in my_list3.values(): print(f”遍历字典的value,正在执行:{new_my_list3}”)print()# 字典数据key与vlaue的遍历应用my_list4 = {“NO.1”: “测试用例1”, “NO.2”: “测试用例2”, “NO.3”: “测试用例3″}for key,value in my_list4.items(): print(f”key是:{key}, value是:{value}”)
2.6.4 enumerate的用法
我们可以通过enumerate来获取接收变量的值,不仅如此,还可以获取它的索引:
# 列表数据进阶用法:enumeratemy_list = [“测试用例1”, “测试用例2”, “测试用例3″]for my_list1, my_list2 in enumerate(my_list): print(f”索引为:{my_list1}, 内容为:{my_list2}”)
2.6.5 range的用法
我们大多数情况的循环代码都是有一定次数的,我们可以通过一个列表,创建多个元素,以此来表示循环的次数:
my_list = [1, 2, 3]for count in my_list: print(“I love DDDD”)
但这样显然是比较麻烦的,我们可以用range来代替,填写好我们需要的次数,然后进行遍历,这样实现了具体次数的遍历:
for count in range(5): print(“I love DDDD”)
除此以外,我们还可以使用切片的格式,来设置range:
“””打印1到520数字间的所有奇数用法与切片相同,中间逗号隔开,[start, end, step]”””for i in range(1, 520, 2): print(i)
2.6.6 for循环嵌套
for循环中可以有if嵌套,也可以有for循环的嵌套,两层、三层…,但在工作中不推荐大家多层嵌套,和if一样不便于理解与维护,能不使用则不使用,如果要使用控制在二层,即一层外循环,一层内循环,一共两层为最高,这点需要切记。
for循环嵌套在自动化测试中主要用于测试用例的遍历执行,是初学者所遇到的第一个真正意义的难点,让我们看一下一个简单的for循环嵌套使用,这里一共输出了9组数据,在for循环嵌套的逻辑中;
最开始会先行执行外循环嵌套,执行一次后到内循环,内循环结束后继续执行内循环的遍历,当内循环结束后跳出,继续外循环,故此结果由下图所示会出现1A,1B…,此外for循环也支持break、continue的操作,这里就不再继续举例了,循环都是通用的,大家可以自行尝试一下,例子如下所示:
“””步骤一:第一次执行外循环开始,因为Python是从上至下的执行,第一次取的数据是1步骤二:第二次执行内循环,取的数据是A分析:从这里我们得到了第一个数据,1A步骤四:这里继续执行内循环,因为嵌套循环是外循环的内部分支,故此先执行内循环完成后才会跳出,这里又会得到一个数据,B分析:因为内循环还没有结束,没有二次进入到外循环故此此时的外循环还是1,内循环的数据取到了B,所以在这个时候的数据就是,1B那么到这里相信大家已经知道是怎么回事了,1A,1B,1C,1D,2A,2B,2C,2D,3A…基础的嵌套for循环就是这样的执行逻辑””””””for 接收变量 in 遍历变量 / 条件: for 接收变量 in 遍历变量 / 条件: 代码块”””a = [1, 2, 3]b = [“A”, “B”, “C”]for i in a: for j in b: print(i,j)
三、总结
本篇文章到这里就结束了,喜欢的小伙伴可以点赞收藏评论加关注哟,希望这篇文章能够帮助到正在学习python自动化测试的小伙伴哟。
本文来自投稿,不代表商川网立场,如若转载,请注明出处:http://www.sclgvs.com/zhishi/55672.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。