进阶Python,从编写Python函数开始!

好多同学都有这样的疑惑,我学习了python的基础语法,那么具体应用该从哪里入手呢?首先大家要确定,代码必须用起来才能越来越熟练!读懂十行代码不如自己亲自上手遍写一行!代码想熟练最好的方法就是能够通过代码解决工作中的实际问题,例如完成UI自动化测试、接口测试、创建测试数据、构建测试环境、清理数据环境等等。上述这些场景我们都可以从把要解决的问题封装成函数开始,例如我用ui自动化进行登陆,可以把登陆的几行代码封装成函数login(p_user,p_pwd),做接口测试可以把常用的get和post方法封装成 get(p_url)和post(​p_url,p_data)。在这里我会详细的讲解python中关于函数的基础知识,最后以selenium 进行百度搜索为例来讲解自动化测试中如何把具体业务封装成方法实现代码复用,相信大家一定会有所收获!​

函数基础知识

函数的本质就是代码复用,在面向对象中把函数称为方法。Python提供了许多内建函数,比如print()。我们也可以自己创建函数,这被叫做用户自定义函数。以下是函数定义的简单规则:

函数代码块以def关键词开头,后接函数标识符名称和圆括号()

圆括号之间用于定义参数。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None

例如:

def func():

       print("函数实例")

func()

输出结果是:

函数实例

函数的参数

形参和实参

定义一个带参数的函数,如下:

def func_para(p_str):

       print(p_str)

在函数func_para中,p_str就是一个形参,也就是形式参数,是用来接收调用函数时传入的参数,你传的是什么它就是什么。实参就是实际参数,在调用函数的时候,传递是Kevin,那么Kevin就是实参,传递的是Mike,那么Mike也是实参,实参传递给函数后,会赋值给函数中的形参

把实参Kevin,赋值给函数,即func_para(“Kevin”),输出结果是Kevin

把实参Mike,赋值给函数,即func_para(“Mike”),输出结果是Mike

函数的返回值

调用方运行函数会得到一个值。首先说明,所有的函数都是有返回值的,如果编程人员没有指定返回值,那默认会返回None。

例如:

def func_return(p_str):

    return p_str

str=func_return (“Kevin”)

print(str)

运行结果

Kevin

函数高级用法

以上是python中函数最基础的定义,相信绝大多数同学都知道,接下来我会给大家介绍一些在python中函数的高级用法

参数的默认值

python允许我们给函数的形参设置一个默认值,不传参数调用的话,就统一默认是这个值。

def func_default(name='kevin'):

      print("名字是"+name)

func_default()

func_default("mike")

输出:

名字是kevin

名字是mike

关键字参数

关键字参数让你可以不用考虑函数的参数位置,你需以键值对的形式指定参数的对应形参。

def func_key(name,age):

       print("你好"+ name+", 你的年龄是"+age+" !")

func_key(age='38',name='kevin')

输出:

你好kevin, 你的年龄是38 !

不固定长度参数

有时候我们需要允许用户提供任意数量的参数,函数的形参可以带个星号来接收,不管调用函数的时候传递了多少实参,都将被收集到形参这个变量当中,形参的类型是元组。例如:

def fun_unfixedlength_1 (*args):

        print(args)

fun_unfixedlength_1 ('kevin','38','67674297')

输出

('kevin', '38', '67674297')

还有一种是带两个星号的形参,用于接收键值对形式的实参,导入到函数中的类型是字典。

def fun_unfixedlength_2 (**args):

      print(args)

fun_unfixedlength_2(name='kevin',age='38',qq='67674297')

输出

{'name': 'kevin', 'age':'38', 'qq': '67674297'}

匿名函数

匿名函数就是不用走正常函数定义的流程,可以直接定义一个简单的函数并把函数本身赋值给一个变量,使得这个变量可以像函数一样被调用,在python中可以用lambda关键字来申明定义一个匿名函数。例如

lambda_demo = lambda first_name,last_name : first_name + " "+last_name

name = lambda_demo('kevin','li')

print(name)

输出kevin li

函数实际应用

最后我结合ui自动化测试给大家举一个函数在测试工作中的实际应用。我们以selenium 进行百度搜索为例,selenium的核心代码如下:

driver.get("https://www.baidu.com/")

driver.find_element_by_id("kw").clear()

driver.find_element_by_id("kw").send_keys("selenium")  #输入框输入selenium

driver.find_element_by_id("su").click()  #点击搜索按钮

备注:我的简书中有很多文章讲解了关于selenium应用的具体方法,在这里就不在赘述了。可以参考:

一文搞定Java和Python在Selenium3中的应用

Selenium原理精讲

场景分析:由于搜索的关键字是千变万化的,而进行搜索的动作是固定的,即:打开百度网页>在输入框输入关键字>点击百度一下搜索按钮。所以我们可以把该场景编写为函数,用一个函数来处理进行各种关键字搜索的需求。核心代码实现如下:

def baidu_search(p_key):

    driver.get("https://www.baidu.com/")

    driver.find_element_by_id("kw").clear()

    driver.find_element_by_id("kw").send_keys(p_key)  # 输入框输入selenium

    driver.find_element_by_id("su").click()  # 点击搜索按钮

如果大家想通过函数来检查是否找到了需要搜索的关键字,那么可以对函数进行改进,如果在搜索结果页面中出现了“百度为您找到相关结果约*个”的文字证明搜索到了关键字返回True,否则返回False,如下图所示:


改进后的代码方法如下:

def baidu_search(p_key):

    driver.get("https://www.baidu.com/")

    driver.find_element_by_id("kw").clear()

    driver.find_element_by_id("kw").send_keys(p_key)  # 输入框输入selenium

    driver.find_element_by_id("su").click()  # 点击搜索按钮

    time.sleep(3)

try:

       result=driver.find_elements_by_class_name("nums_text").get_attribute('value') #获取搜索结果的统计个数值,

                                                                                                               # 默认是:百度为您找到相关结果约...个

       if re.match('百度为您找到相关结果约.*个', result)is None#通过正则进行匹配,没匹配到正则返回None

           return False

       else:

           return True

    exceptNoSuchElementException as e:

           return False

    return True

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352