Best Python code snippet using autotest_python
test_reistijden_measurement_site.py
Source:test_reistijden_measurement_site.py  
1from datetime import datetime2import pytest3from django.test import TestCase4from reistijden_v1.models import Camera, Lane, MeasurementLocation, MeasurementSite5@pytest.mark.django_db6class MeasurementSiteTest(TestCase):7    BASE_MEASUREMENT_SITE = {8        'name': 'foobar',9        'type': 'trajectory',10        'length': 2736,11        'version': '1.0',12        'reference_id': 'foobar',13        'measurement_locations': [14            {15                'index': 1,16                'lanes': [17                    {18                        'cameras': [19                            {20                                'status': 'on',21                                'latitude': '52.372334',22                                'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',23                                'longitude': '4.961688',24                                'lane_number': -1,25                                'view_direction': 112,26                            }27                        ],28                        'specific_lane': '-1',29                    }30                ],31            }32        ],33    }34    def _measurement_site_test(self, before, after, *, expect_new: bool):35        """36        Calls MeasurementSite.get_or_create twice, once with before json and then37        again with after, depending on the value of expect_new we either check38        if the counts of the objects are the same (i.e. no new measurement site39        was created, expect_new == False) or that they are different (i.e. a40        new measurement site was created, expect_new == True).41        """42        self.assertEqual(MeasurementSite.objects.count(), 0)43        self.assertEqual(MeasurementLocation.objects.count(), 0)44        self.assertEqual(Lane.objects.count(), 0)45        self.assertEqual(Camera.objects.count(), 0)46        MeasurementSite.get_or_create(before, datetime.now())47        measurement_site_count = MeasurementSite.objects.count()48        measurement_location_count = MeasurementLocation.objects.count()49        lane_count = Lane.objects.count()50        camera_count = Camera.objects.count()51        MeasurementSite.get_or_create(after, datetime.now())52        # The counts before and after the second call should not be equal if we53        # expect the second call to create a new measurement site, otherwise we54        # expect the counts to remain the same55        assertion = self.assertNotEqual if expect_new else self.assertEqual56        assertion(measurement_site_count, MeasurementSite.objects.count())57        assertion(measurement_location_count, MeasurementLocation.objects.count())58        assertion(lane_count, Lane.objects.count())59        assertion(camera_count, Camera.objects.count())60    def test_changes_in_measurement_site_should_lead_to_new_measurement_site(self):61        before = self.BASE_MEASUREMENT_SITE62        after = {63            'name': 'foobar',64            'type': 'trajectory',65            'length': 5000,  # different vs BASE_MEASUREMENT_SITE66            'version': '1.0',67            'reference_id': 'foobar',68            'measurement_locations': [69                {70                    'index': 1,71                    'lanes': [72                        {73                            'cameras': [74                                {75                                    'status': 'on',76                                    'latitude': '52.372334',77                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',78                                    'longitude': '4.961688',79                                    'lane_number': -1,80                                    'view_direction': 112,81                                }82                            ],83                            'specific_lane': '-1',84                        }85                    ],86                },87            ],88        }89        self._measurement_site_test(before, after, expect_new=True)90    def test_changes_in_locations_should_lead_to_new_measurement_site(self):91        before = self.BASE_MEASUREMENT_SITE92        after = {93            'name': 'foobar',94            'type': 'trajectory',95            'length': 2736,96            'version': '1.0',97            'reference_id': 'foobar',98            'measurement_locations': [99                {100                    'index': 2,  # different vs BASE_MEASUREMENT_SITE101                    'lanes': [102                        {103                            'cameras': [104                                {105                                    'status': 'on',106                                    'latitude': '52.372334',107                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',108                                    'longitude': '4.961688',109                                    'lane_number': -1,110                                    'view_direction': 112,111                                }112                            ],113                            'specific_lane': '-1',114                        }115                    ],116                }117            ],118        }119        self._measurement_site_test(before, after, expect_new=True)120    def test_changes_in_lanes_should_lead_to_new_measurement_site(self):121        before = self.BASE_MEASUREMENT_SITE122        after = {123            'name': 'foobar',124            'type': 'trajectory',125            'length': 2736,126            'version': '1.0',127            'reference_id': 'foobar',128            'measurement_locations': [129                {130                    'index': 1,131                    'lanes': [132                        {133                            'cameras': [134                                {135                                    'status': 'on',136                                    'latitude': '52.372334',137                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',138                                    'longitude': '4.961688',139                                    'lane_number': -1,140                                    'view_direction': 112,141                                }142                            ],143                            'specific_lane': 'lane1',  # different vs BASE_MEASUREMENT_SITE144                        }145                    ],146                }147            ],148        }149        self._measurement_site_test(before, after, expect_new=True)150    def test_changes_in_cameras_should_lead_to_new_measurement_site(self):151        before = self.BASE_MEASUREMENT_SITE152        after = {153            'name': 'foobar',154            'type': 'trajectory',155            'length': 2736,156            'version': '1.0',157            'reference_id': 'foobar',158            'measurement_locations': [159                {160                    'index': 1,161                    'lanes': [162                        {163                            'cameras': [164                                {165                                    'status': 'on',166                                    'latitude': '52.372334',167                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',168                                    'longitude': '4.961688',169                                    'lane_number': -1,170                                    'view_direction': 200,  # different vs BASE_MEASUREMENT_SITE171                                }172                            ],173                            'specific_lane': '-1',174                        }175                    ],176                }177            ],178        }179        self._measurement_site_test(before, after, expect_new=True)180    def test_no_changes_should_not_lead_to_new_measurement_site(self):181        before = self.BASE_MEASUREMENT_SITE182        after = self.BASE_MEASUREMENT_SITE183        self._measurement_site_test(before, after, expect_new=False)184    def test_different_ordering_of_keys_should_not_lead_to_new_measurement_site(self):185        before = self.BASE_MEASUREMENT_SITE186        after = {187            # keys in different order vs BASE_MEASUREMENT_SITE188            'reference_id': 'foobar',189            'version': '1.0',190            'length': 2736,191            'type': 'trajectory',192            'name': 'foobar',193            'measurement_locations': [194                {195                    'index': 1,196                    'lanes': [197                        {198                            'cameras': [199                                {200                                    'status': 'on',201                                    'latitude': '52.372334',202                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',203                                    'longitude': '4.961688',204                                    'lane_number': -1,205                                    'view_direction': 112,206                                }207                            ],208                            'specific_lane': '-1',209                        }210                    ],211                }212            ],213        }214        self._measurement_site_test(before, after, expect_new=False)215    # measurement site with multiple locations, lanes and cameras, all216    # of which are in an unnatural order. we can use this to check that217    # different ordering does not end up creating new measurement sites218    UNORDERED_MEASUREMENT_SITE = {219        'name': 'foobar',220        'type': 'trajectory',221        'length': 2736,222        'version': '1.0',223        'reference_id': 'foobar',224        'measurement_locations': [225            {226                'index': 1,227                'lanes': [228                    {229                        'cameras': [230                            {231                                'status': 'on',232                                'latitude': '52.372334',233                                'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',234                                'longitude': '4.961688',235                                'lane_number': -1,236                                'view_direction': 112,237                            }238                        ],239                        'specific_lane': '-1',240                    }241                ],242            },243            {244                'index': 2,245                'lanes': [246                    {247                        'cameras': [248                            {249                                'status': 'on',250                                'latitude': '52.372334',251                                'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',252                                'longitude': '4.961688',253                                'lane_number': -1,254                                'view_direction': 112,255                            }256                        ],257                        'specific_lane': '-2',258                    },259                    {260                        'cameras': [261                            {262                                'status': 'on',263                                'latitude': '52.372334',264                                'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',265                                'longitude': '4.961688',266                                'lane_number': -1,267                                'view_direction': 999,268                            },269                            {270                                'status': 'on',271                                'latitude': '52.372334',272                                'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',273                                'longitude': '4.961688',274                                'lane_number': -1,275                                'view_direction': 112,276                            },277                        ],278                        'specific_lane': '-1',279                    },280                ],281            },282        ],283    }284    def test_different_order_should_not_lead_to_new_measurement_site(self):285        before = self.UNORDERED_MEASUREMENT_SITE286        # lists are in the correct order vs UNORDERED_MEASUREMENT_SITE287        after = {288            'name': 'foobar',289            'type': 'trajectory',290            'length': 2736,291            'version': '1.0',292            'reference_id': 'foobar',293            'measurement_locations': [294                {295                    'index': 2,296                    'lanes': [297                        {298                            'cameras': [299                                {300                                    'status': 'on',301                                    'latitude': '52.372334',302                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',303                                    'longitude': '4.961688',304                                    'lane_number': -1,305                                    'view_direction': 112,306                                },307                                {308                                    'status': 'on',309                                    'latitude': '52.372334',310                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',311                                    'longitude': '4.961688',312                                    'lane_number': -1,313                                    'view_direction': 999,314                                },315                            ],316                            'specific_lane': '-1',317                        },318                        {319                            'cameras': [320                                {321                                    'status': 'on',322                                    'latitude': '52.372334',323                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',324                                    'longitude': '4.961688',325                                    'lane_number': -1,326                                    'view_direction': 112,327                                }328                            ],329                            'specific_lane': '-2',330                        },331                    ],332                },333                {334                    'index': 1,335                    'lanes': [336                        {337                            'cameras': [338                                {339                                    'status': 'on',340                                    'latitude': '52.372334',341                                    'reference_id': '322aac3d-62c2-495b-afee-7deded30f0e7',342                                    'longitude': '4.961688',343                                    'lane_number': -1,344                                    'view_direction': 112,345                                }346                            ],347                            'specific_lane': '-1',348                        }349                    ],350                },351            ],352        }...HTTPClient.py
Source:HTTPClient.py  
1'''2    å°è£
åéhttp请æ±çç±»3'''4import requests5from Common.Log import Log6from Conf.Config import Config7from Common.Mysql import connect_mysql8import json9from Common.Yaml_Operation import read_yaml_extract10log = Log().logger11class HTTPClient:12    index = 013    def __init__(self):14        '''15            ä¸ä¸ªé¡¹ç®çurlï¼headersåç¼ä¸æ ·çï¼åæ°ç±»åä¹ä¸æ ·16            initæ¹æ³æ¯æ¬¡å®ä¾åçæ¶åï¼èªå¨è°ç¨initæ¹æ³17        '''18        self.init_url_headers()19    def get_mysql_data(self, sql):20        return connect_mysql(sql)21    def init_url_headers(self):22        '''23            åå§åurlåheaders24        '''25        self.url = Config().get('url', 'api_url')26        self.headers = {27            'Content-Type': 'application/json'28        }29        self.re_list = []30    def send_request(self, method, name=None, data=None, headers=None, files=None):31        '''å°è£
åé请æ±çæ¹æ³32        :param method: 请æ±çæ¹å¼ï¼å为getãpostãdeleteç33        :param name: æ¥å£å°åçåç¼34        :param data: æ¥å£åæ°35        :param headers: æ¥å£è¯·æ±å¤´36        :return: è¿åæ¥å£çè¿åå¼37        '''38        # ç¨ä¾æ§è¡æ°é39        HTTPClient.index += 140        # headers夿é»è¾41        if headers:42            # 转æåå
¸ç±»å43            for key, value in headers.items():44                # è¥åå¨ç±»ä¼¼äº${{get_token}}æ ¼å¼çï¼åå°å
容æååºæ¥ï¼æ¾å°self.headerséé¢ï¼ä¹å°±æ¯æè°çåæ°å45                if value.startswith("${{") and value.endswith("}}"):46                    value = value.split("{{")[1].split("}}")[0]47                    value = read_yaml_extract(value)48                self.headers[key] = value49        # data夿é»è¾50        if data:51            # åå
¸ç±»åè½¬æ¢æjsonå符串52            if isinstance(data, dict):53                data = json.dumps(data)54            # åç¼ä¸ä¸å®ç¸åï¼ä½æ¯åç¼æ¯ä¸æ ·çï¼æ¼æ¥æ¯æ¬¡ç请æ±çurl55        self.url = self.url + name56        try:57            # pythonåå°æºå¶ï¼è¿éç¸å½äºrequests.method()ï¼å¦requests.get()58            res = getattr(requests, method.lower())(url=self.url, headers=self.headers, data=data, files=files)59            log.info(f'>>>-----æ¥å£æµè¯ç¨ä¾<{HTTPClient.index}>')60            log.info(f'æ¥å£å°åï¼{self.url}')61            log.info(f'è¯·æ±æ¹æ³ï¼{method}')62            log.info(f'æ¥å£åæ°ï¼{data}')63            # å°æ¥å£è¿åå¼è½¬æ¢æpythonåå
¸æ ¼å¼å¹¶æå°æ¥å¿64            log.info('æ¥å£ååºå¼ï¼{}'.format(res.json()))65            return res.json()66        except Exception as error:67            log.error('æ¥å£è¯·æ±å¼å¸¸ï¼{}'.format(error))68        finally:69            self.init_url_headers()70    def vaildate(self, expect, actual):71        '''72        æ ¡éªæµè¯ç»æç彿°73        :param expect: é¢æç»æ74        :param actual: å®é
ç»æ75        :return:76        '''77        for key, value in expect.items():78            # 颿çkeyå¨å®é
ç»æè¿åå¼çkeyéé¢79            if key in actual:80                # å°sqlè¯å¥è½¬æ¢ææ°æ®åºæ°æ®ãå¦select * from token where id = 1 è¿ä¸ªæ ¼å¼å¤æä¸ºä¸ä¸ªæ°æ®åºè¯å¥ select, update....81                if isinstance(value, str):82                    if value.startswith('select') and 'from' in value or (83                            value.startswith('update') and 'set' in value):84                        # 仿°æ®åºä¸è¯»åvalue85                        value = self.get_mysql_data(value)86                # é¢æç»æä¸å®é
ç»æè¿è¡æ¯è¾87                try:88                    assert value == actual[key]89                    log.debug(f'æ¥å£å®é
ç»æä¸é¢æç»ææ¯å¯¹ä¸è´-->å®é
ç»æä¸º[{key}:{actual[key]}]é¢æç»æä¸º[{key}:{value}]')90                    self.re_list.append('True')91                except AssertionError:92                    log.error(f'æ¥å£çå®é
ç»æä¸é¢æç»æä¸ä¸è´-->å®é
ç»æä¸º[{key}:{actual[key]}]é¢æç»æä¸º[{key}:{value}]')93                    self.re_list.append('False')94            else:95                for _key, _value in actual.items():96                    if isinstance(_value, dict) and (key in _value):97                        expect_new = {}98                        expect_new[key] = value99                        self.vaildate(expect_new, _value)100                        # éå½ï¼éæ°èµ°å¤æé»è¾101                    elif isinstance(_value, list):102                        for i in _value:103                            if key in i:104                                expect_new = {}105                                expect_new[key] = value106                                self.vaildate(expect_new, i)107        if self.re_list.count('False') > 0:108            return False109        else:110            return True111if __name__ == '__main__':112    HTTPClient().send_request(method='get', name='demo')113#114#     para = {115#         "username": "admin",116#         "password": "123456"117#     }118#     HTTPClient().send_request(method='post', name='login', data=para)...datachunk.py
Source:datachunk.py  
1#!/usr/bin/env python2from io import BytesIO3from struct import pack, unpack4class DataChunk:5    6    def __init__(self):7        self.times = 08        self.expect_new = True9        self.current_msg_len = 010        self.current_buffer = BytesIO()11    def handle_msg(self, data):12        self.handle_chunk(data)13    14    def handle_chunk(self, data):15        self.times += 116        print len(data)17        18    def process_chunk(self, data):19        datalen = len(data)20        if self.expect_new:21            if datalen >= 4:22                self.current_msg_len = unpack('i', data[0:4])[0]23                if (self.current_msg_len + 4) == datalen:24                    # We got the entire packet 25                    self.handle_msg(data[4:])26                    return27                elif (self.current_msg_len + 4) > datalen:28                    # We need some more bytes29                    self.current_buffer.write(data[4:])30                    self.expect_new = False31                else:32                    # We may have got more than one message33                    start = 434                    while True:35                        self.handle_msg(data[start : start + self.current_msg_len])36                        start = start + self.current_msg_len37                        if start == datalen:38                            # We finished all the bytes and there is no incomplete messages39                            # in the bytes40                            self.expect_new = True41                            self.current_msg_len = -142                            self.current_buffer = BytesIO()43                            break44                        if 4 <= (datalen - start):45                            self.current_msg_len = unpack('i', data[start : start + 4])[0]46                            start += 447                            if (datalen - start) >= self.current_msg_len:48                                # we have this message also in this buffer49                                continue50                            else:51                                # This message is incomplete, wait for the next chunk52                                self.expect_new = False53                                self.current_buffer = BytesIO()54                                self.current_buffer.write(data[start:])55                                break56                        else:57                            # we don't even know the size of the current buffer58                            self.current_msg_len = -159                            self.current_buffer = BytesIO()60                            self.current_buffer.write(data[start:])61                            self.expect_new = False62                            break63            else:64                # We haven't even received 4 bytes of data for this brand new 65                # packet66                self.expect_new = False67                self.current_buffer = BytesIO()68                self.current_buffer.write(data)69                self.current_msg_len = -170        else:71            # Not a new message72            start = 073            if self.current_msg_len == -1:74                # try to get the message len75                if datalen >= (4 - self.current_buffer.tell()):76                    #get the length of the data77                    start = 4 - self.current_buffer.tell()78                    self.current_buffer.write(data[0: start])79                    self.current_buffer.seek(0)80                    self.current_msg_len = unpack('i', self.current_buffer.read())[0]81                    self.current_buffer = BytesIO()82                else:83                    # Till now even the size of the data is not known84                    self.current_buffer.write(data)85                    return86            while start < datalen:87                if self.current_buffer is None:88                    self.current_buffer = BytesIO()89                if self.current_msg_len == -1:90                    if (datalen - start) < 4:91                        self.current_buffer.write(data[start:])92                        break93                    elif (datalen - start) == 4:94                        self.current_msg_len = unpack('i', data[start:])[0]95                        break96                    else:97                        self.current_msg_len = unpack('i', data[start: start + 4])[0]98                        start += 499                if (datalen - start) >= (self.current_msg_len - self.current_buffer.tell()):100                    consume = self.current_msg_len -  self.current_buffer.tell()101                    self.current_buffer.write(data[start: start + consume])102                    start += consume103                    self.current_msg_len = - 1104                    self.current_buffer.seek(0)105                    self.handle_msg(self.current_buffer.read())106                    self.current_buffer = BytesIO()107                    if start == datalen:108                        self.expect_new = True109                else:110                    self.current_buffer.write(data[start:])...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
