精华内容
下载资源
问答
  • 数据驱动和关键字驱动简单例子(登录)数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中地址使用xxx代替数据文件:D:\\test\\loginData.txt文件内容:admin_cyl||123456aadmin_test||a123456...

    数据驱动和关键字驱动简单例子(登录)

    数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中

    地址使用xxx代替

    数据文件:D:\\test\\loginData.txt

    文件内容:

    admin_cyl||123456a

    admin_test||a123456

    test_shi||a123456

    代码:

    #encoding=utf-8

    import unittest

    from selenium import webdriver

    import time

    class VisitClosePlaceByIe(unittest.TestCase):

    def setUp(self):

    #启动Ie浏览器

    self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer")

    def test_visitURL(self):

    with open("D:\\test\\loginData.txt") as fp:

    for line in fp:

    username,password = line.split("||")

    password = password.strip().decode("gbk")

    self.driver.get("xxx")

    self.driver.find_element_by_id("username")

    self.driver.find_element_by_id("username").send_keys(username)

    self.driver.find_element_by_id("password")

    self.driver.find_element_by_id("password").send_keys(password)

    self.driver.find_element_by_id("button")

    self.driver.find_element_by_id("button").click()

    time.sleep(3) #不加等待时间,则page_source获取的是登录页面的源代码

    assert u"封闭学校管理平台" in self.driver.page_source ,"Keyword not in page"

    def tearDown(self):

    self.driver.quit()

    关键字驱动:将测试用例的执行步骤存放在文件中,每个步骤单独封闭成一个函数,以这个函数名作为关键字,将函数名及传参写入文件中,第个步骤对应一行文件

    数据文件:D:\\test\\schoolLogin.txt

    文件内容:

    visitUrl||["xxx"]

    find_ele||["username","admin_cyl"]

    find_ele||["password","123456a"]

    click_login||["button"]

    assert_word||[u"封闭学校管理平台"]

    代码:school_login.py

    #encoding=utf-8

    import unittest

    from selenium import webdriver

    import time

    class VisitSchool(unittest.TestCase):

    def setUp(self):

    #启动IE浏览器

    self.driver = webdriver.Ie(executable_path="D:\\IEDriverServer")

    def visitUrl(self,url):

    #由于参数个数不一致,所以使用列表做为参数,再用eval将列表字符串转化为列表

    url = eval(url)

    #打开网页

    self.driver.get(url[0])

    def find_ele(self,arg):

    arg = eval(arg)

    #定位输入框并输入值

    self.driver.find_element_by_id(arg[0]).send_keys(arg[1])

    #本来想用两个函数,一个定位,一个输入值,但是输入函数中无法使用定位,所以合并成一个函数

    def click_login(self,id):

    id = eval(id)

    #定位按钮并点击

    self.driver.find_element_by_id(id[0]).click()

    def assert_word(self,keyword):

    #等待3秒,以便页面加载,否则page_source是登录页面的

    time.sleep(3)

    keyword = eval(keyword)

    #断言

    assert keyword[0].strip() in self.driver.page_source, "Keyword not in page"

    def test_schoolLogin(self):

    with open("D:\\test\\schoolLogin.txt") as fp:

    for line in fp:

    action,data = line.split("||")

    action = action.strip()

    data = data.decode("gbk").strip()

    #拼接执行命令

    exec("self."+action+"(u'"+data+"')")

    def tearDown(self):

    self.driver.quit()

    if __name__ == "__main__":

    unittest.main()

    展开全文
  • 做手工测试时间久了,一直想往自动化方向发展,看了论坛上各种文章,众说云云,说从数据驱动关键字驱动,把数据驱动贬得一无是处,把关键字驱动说得那么神化,但我感觉都是一样啊,都是把对象参数化,然后把...

    做手工测试的时间久了,一直想往自动化的方向发展,看了论坛上各种文章,众说云云,说从数据驱动到关键字驱动,把数据驱动贬得一无是处,把关键字驱动说得那么神化,但我感觉都是一样的啊,都是把对象参数化,然后把数据(参数)传进去,执行,然后返回的结果

    下面是一些论点,自己消化去吧大笑

     摘录一些精妙的论点:

     51testing论坛的phililschen:

     
     “什么是数据驱动呢?很大一部分人肯定认为数据驱动就是把需要参数化的东西写在EXCEL里,然后在跑脚本时调用。如果我告诉你,这其实不是数据驱动,
    而只是较高级的参数化,你肯定会很惊讶!现在我来解释一下:首先为什么叫数据驱动呢,那么它肯定有驱动的含义,比如你用EXCEL可以控制测试的业务流吗?回答是不能的。那又如何作到驱动呢?所以说我们将测试数据放在独立的文件里只是高级的参数话。而数据驱动,你必须有数据来控制测试的业务流。比如你测一个WEB程序,有很多页面,你可以通过一个数据来控制每次是再哪个页面下工作的(即通过数据来导航到相应的页面)。它是关键字驱动的低级版本,他控制的是函数级的,而关键字是控制动作级的。所以数据驱动应该是可以控制整个测试的”

      51testing论坛的dreamever:

      “数据驱动本身不是一个工业级标准的概念,因此在不同的公司,都会有好几个解释版本。首先我同意楼主的关于数据驱动的观点,也就是说如果我们仅仅是把测试数据放在数据文件里,这只是一种比较高级的参数化而已。其实我更倾向于把数据驱动理解为一种模式或者一种思想

      对于数据驱动的讨论,我们不妨先抛开QTP来进行。无论是进行自动化测试还是手工测试时,我们都需要设计测试用例,准备测试数据,并且把测试用例与数据分开,在一套测试用例上运行多套测试数据是比较有效率的。我相信这一点大家应该都认同吧。

     
     那么我们不妨再看一下手工测试的场景:当一个手工测试人员A发现在测试数据存储目录下多了一套测试数据时,他就会意识到应该马上执行测试用例,并输入这
    套新的测试数据。其实是测试数据的变化触发了A的测试行为。(有人可能说了我们公司不是这么做的,注意,我们不是在讨论实际的测试管理,我们在对测试模型
    进行抽象)。如果我们更抽象一下,可以这样来看:当测试数据变化时,测试用例就会被执行(无论是A主动还是leader打电话通知),并且按照预先定义的
    规则去读取测试数据并执行测试用例。那么这种情况我们是不是可以理解为一种数据驱动呢?也就是说只要有了新的测试数据或者测试数据发生了变化,那么A就会
    去执行测试用例。这一过程的目的就是为了让所有的测试数据都得到输入并返回相应的输出结果。

      如果大家同意上面的情景是一种数据驱动测试
    的例子,那么我们可以对自动化测试中的数据驱动进行同样的解释:由机器自动读取测试数据,然后测试用具运行测试脚本执行测试用例,并按照预先设置好的参数
    化字段读取测试数据,返回测试结果。目的就是使所有的测试数据都得到输入,并返回输出,验证数据的输入和输出是否符合预期值。这里的测试数据不仅包括业务
    数据,还包括一些动作关键字或决策关键字,以提供足够的信息,让测试工具知道该调用什么样的脚本,应该如何处理各种情况。相对于不同的测试工具,其表现形
    式有可能不同,QTP提供了关键字视图和数据表,robot提出了决策表的概念,Watir的话本身没有什么特殊的模式,完全看测试人员把框架设计成什么
    样了。其实本质上都是消息驱动的不同表现而已,例如刚才的手工测试的例子,测试数据发生变化我们可以把它看成一种消息,接收到这个消息A就开始执行测试。

      51testing论坛的jackmail:

      “数据驱动中的 driven
    一词,你可以简单的理解成导向,导向什么?结果。就是测试数据决定了测试结果,这就是所谓数据驱动,QTP实现了数据驱动的功能,模型,feature,
    特征,无非是个词汇而已,怎么说都没问题,用QTP你可以简单的完成你想实现的数据驱动方法的测试,他就是实现了xx功能。

      还有关键字驱动,就是 关键字决定了结果。 在QTP里关键字就是step中的测试对象名称(对象方法属性,或者值(测试数据))。测试对象名称的改变,就决定了结果的变更。以前有些人写的所谓框架是把对象从Excel表格中导入导出的,他们实现的就是关键字驱动。

      什么驱动,就是什么决定结果。本来结果是固定的,由于驱动数据的变更,导致了结果的不同,没那么复杂。其实概念都是人定的,少去钻牛角尖,理解个大概意思就行了。”

      最后引用一下一篇关键字驱动的理解的文章,毕竟这是QTP主推的东西

      最初用QTP就是简单的录制,然后修改脚本,缺点如下:

      1. 应用软件必须具备一定的稳定性,并且在整个业务流程上都必须完整的实现了,否则顺序录制整能实现?

      2. 自动化脚本的维护性成本非常的高

      3. 自动化脚本的可重用性比较差

      随之出现了关键字驱动的概念,一切都以对象为出发点,这有点像编程语言中从过程化向面向对象转化,在QTP中的具体实现方法是:

      1. 在单个程序界面上将测试所涉及到的对象手工添加到对象库中

      2. 在专家视图中基于对象库中的对象编写自动化测试脚本

      以上这样做的明显的优点在于:

      1. 脚本的可控性非常的强,模块化组织也比较好

      2. 可以在开发完全实现所有的业务流程功能前就建立测试脚本,占据了比较大的主动性,为时间上的安排提供了更大的空间,一个词概括:“测试先行”

    展开全文
  • 数据驱动和关键字驱动简单例子(登录)数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中 地址使用xxx代替数据文件:D:testloginData.txt文件内容:admin_cyl||123456aadmin_test||a123456...

    5c4109353f92e58ab53af329145e319f.png

    50b2d5c1f6100fb55d231545e1630c45.png

    数据驱动和关键字驱动简单例子(登录)

    数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中

    地址使用xxx代替

    数据文件:D:testloginData.txt

    文件内容:

    admin_cyl||123456a

    admin_test||a123456

    test_shi||a123456

    代码:

    #encoding=utf-8

    import unittest

    from selenium import webdriver

    import time

    class VisitClosePlaceByIe(unittest.TestCase):

    def setUp(self):

    #启动Ie浏览器

    self.driver = webdriver.Ie(executable_path = "D:IEDriverServer")

    def test_visitURL(self):

    with open("D:testloginData.txt") as fp:

    for line in fp:

    username,password = line.split("||")

    password = password.strip().decode("gbk")

    self.driver.get("xxx")

    self.driver.find_element_by_id("username")

    self.driver.find_element_by_id("username").send_keys(username)

    self.driver.find_element_by_id("password")

    self.driver.find_element_by_id("password").send_keys(password)

    self.driver.find_element_by_id("button")

    self.driver.find_element_by_id("button").click()

    time.sleep(3) #不加等待时间,则page_source获取的是登录页面的源代码

    assert u"封闭学校管理平台" in self.driver.page_source ,"Keyword not in page"

    def tearDown(self):

    self.driver.quit()

    关键字驱动:将测试用例的执行步骤存放在文件中,每个步骤单独封闭成一个函数,以这个函数名作为关键字,将函数名及传参写入文件中,第个步骤对应一行文件

    数据文件:D:testschoolLogin.txt

    文件内容:

    visitUrl||["xxx"]

    find_ele||["username","admin_cyl"]

    find_ele||["password","123456a"]

    click_login||["button"]

    assert_word||[u"封闭学校管理平台"]

    代码:school_login.py

    #encoding=utf-8

    import unittest

    from selenium import webdriver

    import time

    class VisitSchool(unittest.TestCase):

    def setUp(self):

    #启动IE浏览器

    self.driver = webdriver.Ie(executable_path="D:IEDriverServer")

    def visitUrl(self,url):

    #由于参数个数不一致,所以使用列表做为参数,再用eval将列表字符串转化为列表

    url = eval(url)

    #打开网页

    self.driver.get(url[0])

    def find_ele(self,arg):

    arg = eval(arg)

    #定位输入框并输入值

    self.driver.find_element_by_id(arg[0]).send_keys(arg[1])

    #本来想用两个函数,一个定位,一个输入值,但是输入函数中无法使用定位,所以合并成一个函数

    def click_login(self,id):

    id = eval(id)

    #定位按钮并点击

    self.driver.find_element_by_id(id[0]).click()

    def assert_word(self,keyword):

    #等待3秒,以便页面加载,否则page_source是登录页面的

    time.sleep(3)

    keyword = eval(keyword)

    #断言

    assert keyword[0].strip() in self.driver.page_source, "Keyword not in page"

    def test_schoolLogin(self):

    with open("D:testschoolLogin.txt") as fp:

    for line in fp:

    action,data = line.split("||")

    action = action.strip()

    data = data.decode("gbk").strip()

    #拼接执行命令

    exec("self."+action+"(u'"+data+"')")

    def tearDown(self):

    self.driver.quit()

    if __name__ == "__main__":

    unittest.main()

    展开全文
  • 之前的七篇都是数据驱动的WEB UI自动化测试框架,现在学习并记录一下关键字驱动的测试框架。 这两者在实现技术上可能没有太本质的区别,都是以selenium为核心,但在实现逻辑思想上可能有较大的区别。 一.关键字...

    之前的七篇都是数据驱动的WEB UI自动化测试框架,现在学习并记录一下关键字驱动的测试框架。
    这两者在实现技术上可能没有太本质的区别,都是以selenium为核心,但在实现逻辑和思想上可能有较大的区别。

    一.关键字驱动框架介绍

    关键字驱动框架:
    步骤:一个用例需要进行n步的操作步骤才能完成,而每个操作步骤都有可能用到以下三个关键字
    对象:操作的页面或元素,如用户名输入框
    动作:对对象进行的动作,如点击登录按钮,输入文字
    数据:对象操作所用到的值,如用户名密码等

    以登录163邮箱为例,操作步骤如下:
    1.打开浏览器 对象:浏览器 动作:open 数据:Chrome()或者Firefox()
    2.输入url 对象:浏览器 动作:输入 数据:url
    3.窗口最大化 对象:窗口 动作:最大化 数据:
    4.切换iframe 对象:iframe 动作:切换 数据:
    5.输入用户名 对象:用户名输入框 动作:输入 数据:用户名
    6.输入密码 对象:密码框 动作:输入 数据:密码
    7.点击登录按钮 对象:登录按钮 动作:点击 数据:
    8.等待n秒 对象: 动作:sleep 数据:n
    9.进行断言 对象: 动作: 数据:

    创建一个新项目
    在这里插入图片描述

    登录邮箱的完整步骤用excel来表现
    在这里插入图片描述

    关键字的命名应该用英文,因为后期会映射到代码里
    先在项目下新建这几个包,命名与作用都与之前的数据驱动框架一样,还是把上面的这个excel文件复制到TestData下面
    在这里插入图片描述

    接着继续修改excel,用例这里的sheet名与后面写有具体步骤的sheet要对应
    在这里插入图片描述

    在这里插入图片描述
    还是和上一个项目一样,先封装一个find_element方法,代码都是直接从那里拿的
    在这里插入图片描述

    from selenium.webdriver.support.wait import WebDriverWait
    
    #将selenium读取页面元素的方法封装在此文件内
    def find_element(driver,find_type,find_key):
        # element = driver.find_element(by=find_type,value=find_key)
        # return  element
        try:
            element = WebDriverWait(driver,3).until(lambda driver:driver.find_element(by = find_type,value = find_key))
            return element
        except Exception as e:
            raise e
    
    

    然后这边也还是在excel里也如关键字,需要对excel进行操作,所以将上一个项目的操作excel代码的公用方法拷过来
    在这里插入图片描述

    import openpyxl
    from openpyxl import load_workbook
    
    from ConfigFiles.ConfigPath import xlsxPath
    
    
    class ExcelOperate:
        def __init__(self):
            self.workbook = None
            self.sheet = None
    
        def load_workbook(self,filename):
            '''
            加载相应的excel文件
            :param filename:
            :return:
            '''
            try:
                self.workbook = load_workbook(filename)
            except Exception as e:
                print(e)
    
        def get_sheet_by_name(self,sheetname):
            '''
            拿到xlsx文件里对应的页
            :param sheetname:
            :return:
            '''
            try:
                self.sheet = self.workbook[sheetname]
            except Exception as e:
                print(e)
    
        def  get_rows_nums(self):
            '''
            返回当前页的最大行数
            :return:
            '''
            return self.sheet.max_row
        def get_col_nums(self):
            '''
            获取最大列数
            :return:
            '''
            return self.sheet.max_column
    
        def get_row_values(self,row):
            '''
            根据row获取某一行的值
            :param row:
            :return:
            '''
            columns = self.sheet.max_column
            row_data = []
            #遍历列的时候从1开始,不是从0开始,因为xlsx没有第0行,第0列
            for i in range(1,columns+1):
                cell_value = self.sheet.cell(row = row,column = i).value
                row_data.append(cell_value)
            return row_data
    
        def get_cell_value(self,row,column):
            '''
            获取某一个单元格的值
            :param row:
            :param column:
            :return:
            '''
            cell_value = self.sheet.cell(row=row,column=column).value
            return cell_value
    
        def modify_cell(self,row,column,data):
            '''
            在单元格内写入数据
            :param row:
            :param column:
            :param data:
            :return:
            '''
            self.sheet.cell(row=row,column=column).value = data
            self.workbook.save(xlsxPath)
    
    
    if __name__ == '__main__':
        eo = ExcelOperate()
        #根据名字读取xlsx文件,xlsxPath已经在ConfigPath.py文件中定义过了
        eo.load_workbook(xlsxPath)
        eo.get_sheet_by_name('Sheet1')
        print(eo.get_col_nums())
        print(eo.get_rows_nums())
        print(eo.get_row_values(2))
        print(eo.get_cell_value(2,7))
        # eo.modify_cell(2,7,'dew')
    
    
    
    

    这边报错了,所以还是要再把获取文件地址的代码拷到这边来
    在这里插入图片描述

    import  os
    #获取项目内各个文件的地址并存放在变量里
    
    #获取整个项目的根目录
    ParentDirPath = os.path.dirname(os.path.dirname(__file__))
    
    xlsxPath = os.path.join(ParentDirPath,u'TestData\key_word.xlsx')
    

    二.建立映射,操作关键字

    新建一个Action文件夹,并在下面新建一个elementAction.py文件
    在这里插入图片描述

    Action下面的文件用来操作excel里的关键字:
    在这里插入图片描述

    根据第一个关键字写一个相应的函数,传入的参数里必须都带一个*args,后面会用到,这里不做解释
    在这里插入图片描述
    再写一个获取url的函数,这边driver报错了,因为所有的函数都是共用的一个driver,所以定义一个全局变量
    在这里插入图片描述在这里插入图片描述

    继续补全这个文件里的函数,和excel里的关键字对的上
    在这里插入图片描述
    在这里插入图片描述

    然后还是在文件里价格main,看看上面写的函数是否正确
    在这里插入图片描述

    运行成功,上面写的函数都没有问题
    贴一下这部分的代码:

    import time
    
    from selenium import webdriver
    
    from Utils.Find_element import find_element
    
    driver = None
    
    def open_browser(browser_name,*args):
        global driver
        driver = webdriver.Chrome()
    
    
    def get_url(url_name,*args):
        global driver
        driver.get(url_name)
    
    def max_window(*args):
        global driver
        driver.maximize_window()
    
    def sleep(seconds,*args):
        time.sleep(seconds)
    
    def switch_frame(location_type,location_name,*args):
        global driver
        try:
            i_frame = find_element(driver,location_type,location_name)
            driver.switch_to.frame(i_frame)
        except Exception as e:
            print(e)
    
    def input_content(location_type,location_name,content,*args):
        global driver
        find_element(driver,location_type,location_name).send_keys(content)
    
    
    def click(location_type,location_name,*args):
        global driver
        find_element(driver,location_type,location_name).click()
    
    def assert_title(except_value,*args):
        global driver
        assert except_value in  driver.title
    
    
    def close_browser(*args):
        global driver
        driver.quit()
    
    
    if __name__ == '__main__':
        open_browser('chrome')
        get_url('https://mail.163.com')
        max_window()
        sleep(2)
        switch_frame('tag name','iframe')
        input_content('name','email','lsqtester001')
        input_content('name','password','qwer123')
        click('id','dologin')
        sleep(2)
        assert_title('网易邮箱6.0版')
        close_browser()
    
    
    展开全文
  • 一、RobotFramework简介robotframework(RF)是一个基于python开发的,可扩展的,以关键字驱动的自动化测试框架。2019年7月份之前的RF版本只支持python2.7,2019年7...关键字驱动和数据驱动的区别?关键字驱动:表示把...
  • 导读:指标是绩效考核风向标,反映了公司对经营成果导向和倾向。...两者重要区别:1、绩效考核指标:以结果和效果为导向,用数据表达,偏客观,与薪酬全面融合,重利益驱动和丰富激励。2、行为考核指标...
  • -Fulcro是一个全栈库,它采用NetflixFalcor,FacebookRelayOm Next对反应性,功能性,数据驱动软件进行改编的数据驱动原则。 -单页面做seo(搜索引擎优化): -根据部分进行优化为每个关键字创建一个或或每个...
  • 3.4 小结:基本数据类型—— Java中一切数据和运算基础 63 3.5 习题 65 第4章 Java中程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
  • 3.4 小结:基本数据类型—— Java中一切数据和运算基础 63 3.5 习题 65 第4章 Java中程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
  • 3.4 小结:基本数据类型—— Java中一切数据和运算基础 63 3.5 习题 65 第4章 Java中程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
  •  封装是把过程和数据包围起来,对数据访问只能通过已定义界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装对象,这些对象通过一个受保护接口访问其他对象。 4. 多态性: ...
  • 建议28:理解延迟求值主动求值之间的区别 / 75 建议29:区别LINQ查询中的IEnumerableIQueryable / 78 建议30:使用LINQ取代集合中的比较器迭代器 / 80 建议31:在LINQ查询中避免不必要的迭代 / 83 第3章 ...
  • MySQL之连接查询

    2019-09-25 11:30:13
    目录UNIONIN EXISTS的区别 在连接查询中一直要遵守的一个原则就是:小表驱动大表原则 UNION UNION操作符主要用来连接两个以上的SELECT语句的结果组合到一个结果集合中。多个SELECT语句会删除重复数据 可选关键字...
  • 深度探索C++对象模型

    2019-10-12 20:54:13
    深度探索C++对象模型参考链接:第1章 关于对象C++额外成本三种对象模型简单对象模型表格驱动对象模型C++对象模型classstruct关键字的差异三种编程典范一个类对象内存大小一些结论[^3] 参考链接: 深度探索...
  • C专家编程 清晰版 PDF

    千次下载 热门讨论 2011-10-31 18:24:14
    3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 数组...
  • dbvis_windows-x64_9_1_5

    热门讨论 2014-01-08 14:21:14
    立刻指向并浏览数据库结构,观看数据库对象详细特征,图解桌面数据、任意SQL声明或SQL脚本,利用逆向工程图示出primary/foreign键值,并以先进图表方式显示出来,友好图形界面接口与各种特色独特组合,...
  • TCP socketUDP socket的区别是怎样的 如何用有连接的方式实现聊天室 如何用无连接的方式实现系统广播 如何实现Proxy服务器 如何下载网页 如何在应用程序中映射网络驱动器 如何实现电话拨号上网 如何删除Internet...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    18.2 在 C #代码中调用 C++ VB 编写组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • C语言专家编程

    2015-05-14 10:38:33
    3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 ...
  • C专家编程.part3

    2015-05-08 09:33:48
    3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 ...
  • C专家编程.part2

    2015-05-08 09:32:46
    3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 ...
  • C专家编程.part1

    2015-05-08 09:30:59
    3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    18.2 在 C #代码中调用 C++ VB 编写组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • 计算机内部信息可以分成控制信息和数据信息二大类;控制信息可分为指令和控制字两类;数据信息可分为数值信息和非数值信息两类。 1-8 什么叫二进制?使用二进制有何优点和缺点? 解: 二进制是基数为2,每位权...
  • 3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 数组...
  • 3.6 typedefintx[10]#definexint[10]的区别 3.7 typedefstructfoo{...foo;}的含义 3.8 理解所有分析过程的代码段 3.9 轻松一下——驱动物理实体的软件 第4章 令人震惊的事实:数组指针并不相同 4.1 数组...

空空如也

空空如也

1 2 3 4 5 6
收藏数 113
精华内容 45
关键字:

关键字驱动和数据驱动的区别